Megosztás:


C# Power Fx test függvény létrehozása (előzetes verzió)

Feljegyzés

Az előzetes funkciókat nem célszerű termelési környezetben használni, és előfordulhat, hogy korlátozott funkcionalitással rendelkeznek. Ezek a funkciók a hivatalos kiadás előtt érhetők el, hogy az ügyfelek korán megismerkedhessenek velük, és visszajelzést adhassanak róluk.

Microsoft Power Fx egy hatékony kevés kódolást igénylő nyelv, amelyet a Power Apps C# használatával bővíthet egyéni tesztfüggvények létrehozásához. Ez a cikk azt ismerteti, hogyan hozhat létre C# Power Fx test függvényt, amely zökkenőmentes felhasználói élményt biztosít a készítők és a fejlesztők számára is.

A Test Engine "nincs szikla" bővíthetőségi modellje Power Apps biztosítja, hogy a felhasználók akadályok ütközése nélkül bővíthessék a Power Apps tesztmotor képességeit. Ez a modell lehetővé teszi a fejlesztők számára, hogy egyéni függvényeket hozzanak létre a C# használatával, amelyek integrálhatók Power Fx az összetett forgatókönyvek kezeléséhez.

Tesztmotor modulok

A tesztmotoron belüli tesztmotor-modulok Power Fx a bővíthetőségi modell használatával épülnek fel. A termékkódot példaként használhatja a Test Engine kiterjesztésére.

Íme egy példa egy Power Fx olyan függvényre, amely a vászonalapú alkalmazás feltételes hozzájárulási párbeszédpanelénekkezeléséhez szükséges kód vázlatát biztosítja.

A hozzájárulási párbeszédpanel egy olyan üzenet, amely megjelenik a felhasználók számára, és engedélyt kér bizonyos erőforrások eléréséhez vagy bizonyos műveletek végrehajtásához. Ez a párbeszédpanel kulcsfontosságú a biztonság fenntartásához és annak biztosításához, hogy a felhasználók tisztában legyenek a nevükben végrehajtott műveletekkel, és elfogadják azokat.

Példa a webhelyhez SharePoint csatlakozó alkalmazás kapcsolati hozzájárulási párbeszédpanelére.

A hozzájárulási párbeszédpanel azért fontos, mert segít megelőzni a jogosulatlan hozzáférést és műveleteket. Biztosítja, hogy a felhasználók tájékozódjanak, és kifejezett hozzájárulásukat adják meg a bizalmas műveletek végrehajtása előtt. Ez olyan esetekben fontos, amikor az alkalmazásnak hozzá kell férnie a felhasználói adatokhoz, vagy műveleteket kell végrehajtania, és ez a feltételes viselkedés hatással lehet az automatizált tesztekre.

A beleegyezési párbeszédek egyik kihívása, hogy a teszteket nem determinisztikussá tehetik A kérdés feltételesen megjelenhet különböző tényezők, például felhasználói engedélyek vagy korábbi interakciók alapján. Ez a feltételes megjelenés bonyolíthatja a tesztelési folyamatot, mivel a tesztmotornak megfelelően kell kezelnie ezeket a párbeszédablakokat.

A komplexitás absztrakciója Power Fx

Power Fx segít absztrahálni a hozzájárulási párbeszédpanel feltételes várakozásának és szükség esetén a kapcsolatok létrehozásának összetettségét. A készítők egyszerűbb Power Fx és intuitívabb módon határozhatják meg a beleegyezési párbeszédpanelek kezelésének logikáját.

Íme egy példa a Power Fx hozzájárulási párbeszédpanel kezelésére egy egyéni oldalon:

Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))

Ebben a példában a ConsentDialog függvény ellenőrzi, hogy látható-e a hozzájárulási párbeszédpanel. Ha igen, a függvény válaszolhat a tesztfiók hozzájárulását megerősítő párbeszédpanelre. A párbeszédablak kezelése után a rendszer végrehajtja a többi tesztlépést.

Az Table argumentum lehetővé teszi, hogy a hozzájárulási párbeszédpanel várakozási folyamata kilépjen, ha a megadott szöveggel ellátott címke látható.

Tesztfunkciók kiterjesztése Power Fx C használatával#

Az alábbi példa egy minta szerkezeti kódot mutat be, amely kiindulópontként használható a példa befejezéséhez:

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
using Microsoft.Extensions.Logging;
using Microsoft.Playwright;
using Microsoft.PowerApps.TestEngine.Config;
using Microsoft.PowerApps.TestEngine.TestInfra;
using Microsoft.PowerFx;
using Microsoft.PowerFx.Core.Utils;
using Microsoft.PowerFx.Types;

namespace testengine.module
{
    /// <summary>
    /// This will check the custom pages of a model driven app looking for a consent dialog
    /// </summary>
    public class ConsentDialogFunction : ReflectionFunction
    {
        private readonly ITestInfraFunctions _testInfraFunctions;
        private readonly ITestState _testState;
        private readonly ILogger _logger;
        private static TableType SearchType = TableType.Empty()
              .Add(new NamedFormulaType("Text", FormulaType.String, displayName: "Text"));
    
        /// <summary>
        /// Constructor: Initializes the function with necessary dependencies, 
        /// including ITestInfraFunctions, ITestState, and ILogger.
        /// </summary>
        /// <param name="testInfraFunctions">The test infrastructure functions.</param>
        /// <param name="testState">The test state.</param>
        /// <param name="logger">The logger instance.</param>
        public ConsentDialogFunction(ITestInfraFunctions testInfraFunctions, 
           ITestState testState, 
           ILogger logger) : base(DPath.Root.Append(
               new DName("Preview")), 
               "ConsentDialog", 
               FormulaType.Blank, 
               SearchType)
               {
                  _testInfraFunctions = testInfraFunctions;
                  _testState = testState;
                  _logger = logger;
               }

        /// <summary>
        /// Execute Method: Logs the execution and calls the ExecuteAsync 
        /// method to handle the consent dialog.
        /// </summary>
        /// <param name="searchFor">The table value to search for.</param>
        /// <returns>A blank value.</returns>
        public BlankValue Execute(TableValue searchFor)
        {
            _logger.LogInformation("------------------------------\n\n" +
                "Executing ConsentDialog function.");

            ExecuteAsync(searchFor).Wait();

            return FormulaValue.NewBlank();
        }

        /// <summary>
        /// ExecuteAsync Method: Retrieves the page context and handles the consent dialog with a timeout.
        /// </summary>
        /// <param name="searchFor">The table value to search for.</param>
        /// <returns>A task representing the asynchronous operation.</returns>
        private async Task ExecuteAsync(TableValue searchFor)
        {
            var page = _testInfraFunctions
               .GetContext()
               .Pages
               .Where(p => p.Url.Contains("main.aspx"))
               .First();

            // ... IPage to handle consent dialog with timeout
        }
    }
}

ConsentDialogFunction példa magyarázata

  • Névtér és importálások: Importálja a szükséges névtereket és definiálja a testengine.module névteret.
  • Osztálydefiníció: Az ConsentDialogFunction osztály örökli a ReflectionFunction-t , és meghatározza az egyéni függvényt ConsentDialog.
  • Konstruktor: Inicializálja a függvényt a szükséges függőségekkel, beleértve ITestInfraFunctions, ITestState, és ILogger.
  • Végrehajtási módszer: Naplózza a végrehajtást, és meghívja a ExecuteAsync metódust a hozzájárulási párbeszédpanel kezeléséhez.
  • ExecuteAsync metódus: Lekéri az oldal környezetét, és időtúllépéssel kezeli a hozzájárulási párbeszédpanelt.