Zdieľať cez


Vytvorenie testovacej funkcie v jazyku C# Power Fx (ukážka)

Poznámka

Funkcie ukážky nie sú určené na produkčné účely a môžu mať obmedzenú funkčnosť. Tieto funkcie sú k dispozícii pred oficiálnym vydaním, aby k nim mohli zákazníci získať rýchly prístup a poskytnúť odozvu.

Microsoft Power Fx je výkonný nízkokódový jazyk používaný v Power Apps a je možné ho rozšíriť pomocou jazyka C# na vytváranie vlastných testovacích funkcií. Tento článok vysvetľuje, ako vytvoriť testovaciu funkciu v jazyku C#, ktorá poskytuje bezproblémové používanie pre tvorcov aj vývojárov. Power Fx

Model rozšíriteľnosti „bez útesov“ testovacieho enginu zaisťuje, že používatelia môžu rozšíriť možnosti testovacieho enginu bez akýchkoľvek prekážok. Power Apps Power Apps Tento model umožňuje vývojárom vytvárať vlastné funkcie pomocou jazyka C#, ktoré je možné integrovať do systému na spracovanie zložitých scenárov. Power Fx

Moduly testovacieho enginu

Moduly testovacieho enginu pre vnútri testovacieho enginu sú vytvorené pomocou modelu rozšíriteľnosti. Power Fx Kód produktu môžete použiť ako príklady rozšírenia Test Engine.

Tu je príklad funkcie, ktorá poskytuje osnovu kódu na spracovanie dialógového okna podmieneného súhlasu v aplikácii typu canvas. Power Fx

Dialógové okno súhlasu je výzva, ktorá sa zobrazí používateľom a žiada ich o povolenie na prístup k určitým zdrojom alebo vykonanie konkrétnych akcií. ... Tento dialóg je kľúčový pre udržanie bezpečnosti a zabezpečenie toho, aby si používatelia boli vedomí akcií, ktoré sa v ich mene vykonávajú, a aby s nimi súhlasili.

Príklad dialógového okna súhlasu s pripojením pre aplikáciu pripájajúcu sa k webovej stránke. SharePoint

Dialógové okno súhlasu je dôležité, pretože pomáha predchádzať neoprávnenému prístupu a akciám. Zabezpečuje, aby boli používatelia informovaní a poskytli svoj výslovný súhlas pred vykonaním akýchkoľvek citlivých operácií. Toto je dôležité v scenároch, kde aplikácia potrebuje prístup k používateľským údajom alebo vykonávať akcie a toto podmienené správanie by mohlo ovplyvniť automatizované testy.

Jednou z výziev dialógových okien o súhlase je, že môžu spôsobiť, že testy budú nedeterministické. Výzva sa môže podmienečne zobraziť na základe rôznych faktorov, ako sú napríklad používateľské povolenia alebo predchádzajúce interakcie. Toto podmienené zobrazenie môže skomplikovať proces testovania, pretože testovací engine musí tieto dialógové okná spracovať vhodným spôsobom.

Abstrahovanie zložitosti pomocou Power Fx

Power Fx pomáha abstrahovať zložitosť podmieneného čakania na dialógové okno so súhlasom a vytvárania prepojení v prípade potreby. Tvorcovia môžu použiť Power Fx na definovanie logiky pre spracovanie dialógových okien súhlasu jednoduchším a intuitívnejším spôsobom.

Tu je príklad použitia Power Fx na spracovanie dialógového okna súhlasu na vlastnej stránke:

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

V tomto príklade funkcia ConsentDialog kontroluje, či je dialógové okno súhlasu viditeľné. Ak áno, funkcia môže reagovať na dialógové okno potvrdzujúce súhlas s testovacím účtom. Po spracovaní dialógového okna sa vykonajú zostávajúce testovacie kroky.

Argument Table umožňuje ukončenie procesu čakania na dialógové okno súhlasu, ak je viditeľný štítok so zadaným textom.

Rozšírenie testovacích funkcií pomocou jazyka C# Power Fx

Nasledujúci príklad je vzorový kód osnovy, ktorý by sa mohol použiť ako východiskový bod na dokončenie tohto príkladu:

// 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
        }
    }
}

Vysvetlenie príkladu funkcie ConsentDialogFunction

  • Menný priestor a import: Importuje potrebné menné priestory a definuje menný priestor testengine.module .
  • Definícia triedy: Trieda ConsentDialogFunction dedí z ReflectionFunction a definuje vlastnú funkciu ConsentDialog.
  • Konštruktor: Inicializuje funkciu s potrebnými závislosťami vrátane ITestInfraFunctions, ITestState a ILogger.
  • Metóda spustenia: Zaznamená vykonanie a zavolá metódu ExecuteAsync na spracovanie dialógového okna súhlasu.
  • Metóda ExecuteAsync: Načíta kontext stránky a spracuje dialógové okno súhlasu s časovým limitom.