Ustvari C# Power Fx testno funkcijo (zastarela)

opomba,

Test Engine je zastarel in bo odstranjen v prihodnji izdaji. Uporabite Power Platform Playwright vzorce za zmogljivosti avtomatizacije testiranja v Power Platform in Dynamics 365 storitvah.

Microsoft Power Fx je zmogljiv jezik, ki se uporablja v Power Apps, in ga je mogoče razširiti z uporabo C# za ustvarjanje prilagojenih testnih funkcij. V tem članku je razloženo, kako ustvariti testno funkcijo v jeziku C#, ki zagotavlja brezhibno izkušnjo tako za ustvarjalce kot za razvijalce. Power Fx

Model razširljivosti 'no cliffs Power Apps Test Engine zagotavlja, da lahko uporabniki razširijo zmogljivosti Power Apps Test Engine, ne da bi naleteli na ovire. Ta model omogoča razvijalcem ustvarjanje funkcij po meri z uporabo jezika C#, ki jih je mogoče integrirati v Power Fx za obravnavo kompleksnih scenarijev.

Moduli testnega mehanizma

Moduli testnega mehanizma za znotraj testnega mehanizma so zgrajeni z uporabo modela razširljivosti. Power Fx Kodo izdelka lahko uporabite kot primer, kako je mogoče razširiti Test Engine.

Tukaj je primer funkcije, ki ponuja oris kode za obravnavo pogovornega okna s pogojnim soglasjem v aplikaciji platna. Power Fx

Pogovorno okno za soglasje je poziv, ki se prikaže uporabnikom in jih prosi za dovoljenje za dostop do določenih virov ali izvedbo določenih dejanj. ... To pogovorno okno je ključnega pomena za ohranjanje varnosti in zagotavljanje, da so uporabniki seznanjeni z ukrepi, ki se izvajajo v njihovem imenu, in se z njimi strinjajo.

Primer pogovora za soglasje za povezavo za aplikacijo, ki se povezuje na SharePoint spletno stran.

Pogovorno okno za soglasje je pomembno, ker pomaga preprečiti nepooblaščen dostop in dejanja. Zagotavlja, da so uporabniki obveščeni in dajo svoje izrecno soglasje, preden se izvedejo kakršne koli občutljive operacije. To je pomembno v scenarijih, kjer mora aplikacija dostopati do uporabniških podatkov ali izvajati dejanja in bi to pogojno vedenje lahko vplivalo na avtomatizirane teste.

Eden od izzivov pri pogovornih oknih za soglasje je, da lahko teste naredijo nedeterministične. Poziv se lahko pogojno prikaže glede na različne dejavnike, kot so uporabniška dovoljenja ali prejšnje interakcije. Ta pogojni videz lahko oteži postopek testiranja, saj mora testni mehanizem ta pogovorna okna ustrezno obravnavati.

Abstrahiranje kompleksnosti z Power Fx

Power Fx pomaga abstrahirati kompleksnost pogojnega čakanja na pogovorno okno za soglasje in ustvarjanja povezav, če je potrebno. Ustvarjalci lahko z Power Fx določijo logiko za obravnavo pogovornih oken za soglasje na bolj preprost in intuitiven način.

Tukaj je primer uporabe Power Fx za obravnavo pogovornega okna za soglasje na strani po meri:

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

V tem primeru funkcija ConsentDialog preveri, ali je pogovorno okno za soglasje vidno. Če je tako, se lahko funkcija odzove na pogovorno okno, ki potrjuje soglasje za testni račun. Ko je dialog obdelan, se izvedejo preostali koraki testiranja.

Argument Table omogoča izhod iz procesa čakanja v pogovornem oknu za soglasje, če je vidna oznaka z navedenim besedilom.

Razširitev testnih funkcij z uporabo C# Power Fx

Naslednji primer je vzorčna orisna koda, ki bi jo lahko uporabili kot izhodišče za dokončanje tega primera:

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

Primer razlage funkcije ConsentDialogFunction

  • Imenski prostor in uvozi: Uvozi potrebne imenske prostore in definira imenski prostor testengine.module .
  • Definicija razreda: Razred ConsentDialogFunction deduje od ReflectionFunction in definira funkcijo po meri ConsentDialog.
  • Konstruktor: Inicializira funkcijo s potrebnimi odvisnostmi, vključno z ITestInfraFunctions, ITestState in ILogger.
  • Metoda izvajanja: Zabeleži izvajanje in pokliče metodo ExecuteAsync za obravnavo pogovornega okna za soglasje.
  • Metoda ExecuteAsync: Pridobi kontekst strani in obravnava pogovorno okno za soglasje s časovno omejitvijo.