Dalintis per


Sukurkite C# Power Fx test funkciją (peržiūra)

Pastaba.

Peržiūros funkcijos nėra skirtos naudoti gamybai ir gali būti apribotas jų funkcionalumas. Šias funkcijas galima naudoti prieš oficialų išleidimą, kad klientai galėtų gauti ankstyvą prieigą ir pateikti atsiliepimų.

Microsoft Power Fx yra galinga žemo kodo kalba, naudojama Power Apps ir ją galima išplėsti naudojant C#, kad būtų sukurtos pasirinktinės bandymo funkcijos. Šiame straipsnyje paaiškinama, kaip sukurti C# Power Fx test funkciją, suteikiant sklandžią patirtį tiek kūrėjams, tiek kūrėjams.

"Test Engine" išplėtimo modelis Power Apps "no cliffs" užtikrina, kad naudotojai galėtų išplėsti bandomojo variklio galimybes Power Apps neatsitrenkdami į jokias kliūtis. Šis modelis leidžia kūrėjams kurti pasirinktines funkcijas naudojant C#, kurias galima integruoti Power Fx į sudėtingus scenarijus.

Bandomieji variklio moduliai

Bandymo variklio moduliai , skirti Power Fx bandomojo variklio viduje, yra sukurti naudojant išplėtimo modelį. Produkto kodą galite naudoti kaip pavyzdį, kaip galima išplėsti bandomąjį variklį.

Čia pateikiamas funkcijos, Power Fx kuri pateikia kodo struktūrą, kad drobės programoje būtų galima tvarkyti sąlyginio sutikimo dialogo langą, pavyzdys.

Sutikimo dialogo langas yra vartotojams rodomas raginimas, kuriame prašoma jų leidimo pasiekti tam tikrus išteklius arba atlikti konkrečius veiksmus. Šis dialogo langas yra labai svarbus siekiant išlaikyti saugumą ir užtikrinti, kad vartotojai žinotų apie veiksmus, kurių imamasi jų vardu, ir su jais sutiktų.

Taikomosios programos, jungiančios prie SharePoint svetainės, sutikimo prisijungti dialogo lango pavyzdys.

Sutikimo dialogo langas yra svarbus, nes padeda apsisaugoti nuo neteisėtos prieigos ir veiksmų. Taip užtikrinama, kad naudotojai būtų informuoti ir duotų aiškų sutikimą prieš atliekant bet kokias neskelbtinas operacijas. Tai svarbu tais atvejais, kai programai reikia pasiekti naudotojo duomenis arba atlikti veiksmus, o šis sąlyginis elgesys gali turėti įtakos automatiniams bandymams.

Vienas iš sutikimo dialogų iššūkių yra tas, kad jie gali padaryti testus nedeterministinius. Raginimas gali būti sąlyginai rodomas atsižvelgiant į įvairius veiksnius, pvz., vartotojo leidimus arba ankstesnes sąveikas. Ši sąlyginė išvaizda gali apsunkinti bandymo procesą, nes bandomasis variklis turi tinkamai tvarkyti šiuos dialogus.

Abstrakcija sudėtinga su Power Fx

Power Fx padeda abstrahuoti sąlyginai laukiant sutikimo dialogo lango ir, jei reikia, kuriant ryšius. Kūrėjai gali apibrėžti Power Fx sutikimo dialogų tvarkymo logiką paprasčiau ir intuityviau.

Štai pavyzdys, kaip tvarkyti Power Fx sutikimo dialogo langą pasirinktiniame puslapyje:

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

Šiame pavyzdyje funkcija tikrina, ConsentDialog ar matomas sutikimo dialogo langas. Jei taip, funkcija gali atsakyti į dialogo langą, patvirtinantį sutikimą bandomajai paskyrai. Kai dialogo langas bus apdorotas, bus atlikti likę bandymo veiksmai.

Argumentas Table leidžia išeiti sutikimo dialogo lango laukimo procesui yra etiketė su pateiktu tekstu.

Bandymo funkcijų išplėtimas Power Fx naudojant C#

Toliau pateiktas pavyzdys yra struktūros kodo pavyzdys, kurį galima naudoti kaip pradinį tašką šiam pavyzdžiui užbaigti:

// 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 paaiškinimo pavyzdys

  • Vardų sritis ir importavimas: importuojamos būtinos vardų sritys ir apibrėžiamos testengine.module vardų sritys.
  • Klasės apibrėžimas: klasė ConsentDialogFunction paveldi iš ReflectionFunction ir apibrėžia pasirinktinę funkciją ConsentDialog.
  • Konstruktorius: inicijuoja funkciją su būtinomis priklausomybėmis, įskaitant ITestInfraFunctionsITestState ir ILogger.
  • Vykdymo metodas: registruoja vykdymą ir iškviečia ExecuteAsync sutikimo dialogo lango tvarkymo būdą.
  • ExecuteAsync metodas: gauna puslapio kontekstą ir tvarko sutikimo dialogo langą su skirtuoju laiku.