Deli putem


Kreirajte funkciju C # Power Fx test (pregled)

Belešku

Funkcije pregleda nisu namenjene za korišćenje u proizvodnji i mogu da imaju ograničene funkcionalnosti. Ove funkcije su dostupne pre zvaničnog objavljivanja kako bi klijenti mogli ranije da im pristupe i pruže povratne informacije.

Microsoft Power Fx je moćan jezik sa niskim kodom koji se koristi u Power Apps, a može se proširiti pomoću C # za kreiranje prilagođenih testnih funkcija. Ovaj članak objašnjava kako kreirati C # Power Fx test funkciju, pružajući besprekorno iskustvo i za proizvođače i za programere.

Model proširivosti Test Engine-a Power Apps "bez litica" osigurava da korisnici mogu proširiti mogućnosti Power Apps Test Engine-a bez udaranja u bilo kakve barijere. Ovaj model omogućava programerima da kreiraju prilagođene funkcije koristeći C #, koje se mogu integrisati u Power Fx za rukovanje složenim scenarijima.

Test Engine moduli

Moduli Test motora za unutrašnjost Power Fx Test Engine su izgrađeni korišćenjem modela proširivosti. Možete koristiti kod proizvoda kao primere kako se Test Engine može proširiti.

Evo primera Power Fx funkcije koja obezbeđuje pregled koda za rukovanje dijalogom uslovne saglasnosti u aplikaciji platna.

Dijalog saglasnosti je upit koji se pojavljuje korisnicima, tražeći njihovu dozvolu za pristup određenim resursima ili obavljanje određenih radnji. Ovaj dijalog je od ključnog značaja za održavanje bezbednosti i obezbeđivanje da su korisnici svesni i da se slažu sa akcijama koje se preduzimaju u njihovo ime.

Primer dijaloga saglasnosti za povezivanje za aplikaciju koja se povezuje sa sajtom SharePoint .

Dijalog saglasnosti je važan jer pomaže u sprečavanju neovlašćenog pristupa i akcija. Obezbeđuje da su korisnici informisani i daju svoju izričitu saglasnost pre nego što se izvrše bilo kakve osetljive operacije. Ovo je važno u scenarijima u kojima aplikacija treba da pristupi korisničkim podacima ili izvrši akcije i ovo uslovno ponašanje može uticati na automatizovane testove.

Jedan od izazova sa dijalogom saglasnosti je da oni mogu da učine testove nedeterminističkim. Upit se može uslovno pojaviti na osnovu različitih faktora, kao što su korisničke dozvole ili prethodne interakcije. Ovaj uslovni izgled može komplikovati proces testiranja, jer Test Engine treba da na odgovarajući način rukuje ovim dijalozima.

Apstraktna složenost sa Power Fx

Power Fx pomaže apstrahirati složenost uslovnog čekanja dijaloga saglasnosti i stvaranja veza ako je potrebno. Proizvođači mogu da definišu Power Fx logiku za rukovanje dijalozima saglasnosti na jednostavniji i intuitivniji način.

Evo primera korišćenja Power Fx za rukovanje dijalogom saglasnosti na prilagođenoj stranici:

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

U ovom primeru, funkcija proverava ConsentDialog da li je dijalog saglasnosti vidljiv. Ako jeste, funkcija može da odgovori na dijalog koji potvrđuje saglasnost za test nalog. Kada se dijalog obrađuje, izvršavaju se preostali koraci testa.

Argument Table omogućava dijalog saglasnosti proces čekanja da izađe je oznaka sa obezbeđenim tekstom je vidljiva.

Proširenje Power Fx test funkcija pomoću C#

Sledeći primer je uzorak okvirnog koda koji se može koristiti kao polazna tačka za završetak ovog 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
        }
    }
}

ConsentDialogFunction primer objašnjenja

  • Imenski prostor i uvoz: Uvozi neophodne imenske prostore i definisanje imenskog testengine.module prostora.
  • Definicija klase: Klasa ConsentDialogFunction nasleđuje od ReflectionFunction i definiše prilagođenu funkciju ConsentDialog.
  • Konstruktor: Inicijalizuje funkciju sa potrebnim zavisnostima, uključujući ITestInfraFunctions i ITestState ILogger.
  • Ekecute Method: Evidentira izvršenje i poziva ExecuteAsync metod za rukovanje dijalogom saglasnosti.
  • EkecuteAsinc Method: Preuzima kontekst stranice i obrađuje dijalog saglasnosti sa vremenskim ograničenjem.