Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Notat
Forhåndsversjonsfunksjonene er ikke ment for produksjonsbruk og kan ha begrenset funksjonalitet. Disse funksjonene er tilgjengelige før en offisiell utgivelse, slik at kunder kan få tidlig tilgang og gi tilbakemeldinger.
Microsoft Power Fx er et kraftig lavkodespråk som brukes i Power Apps, og det kan utvides ved hjelp av C# for å lage tilpassede testfunksjoner. Denne artikkelen forklarer hvordan du oppretter en C# Power Fx test-funksjon, noe som gir en sømløs opplevelse for både utviklere og utviklere.
"Ingen klipper"-utvidelsesmodellen til Power Apps Test Engine sikrer at brukere kan utvide mulighetene til Power Apps testmotoren uten å treffe noen barrierer. Denne modellen lar utviklere lage tilpassede funksjoner ved hjelp av C#, som kan integreres for Power Fx å håndtere komplekse scenarier.
Test motor-moduler
Testmotormodulene for Power Fx innsiden av testmotoren er bygget ved hjelp av utvidbarhetsmodellen. Du kan bruke produktkoden som eksempler på hvordan Test Engine kan utvides.
Eksempel på dialogboks for samtykke
Her er et eksempel på en Power Fx funksjon som gir omrisset av kode for å håndtere en dialogboks for betinget samtykke i et lerretsprogram.
En samtykkedialogboks er en melding som vises for brukere og ber om tillatelse til å få tilgang til bestemte ressurser eller utføre bestemte handlinger. Denne dialogen er avgjørende for å opprettholde sikkerheten og sikre at brukerne er klar over og godtar handlingene som utføres på deres vegne.
Samtykkedialogen er viktig fordi den bidrar til å forhindre uautorisert tilgang og handlinger. Det sikrer at brukerne blir informert og gir sitt eksplisitte samtykke før sensitive operasjoner utføres. Dette er viktig i scenarioer der programmet trenger tilgang til brukerdata eller utføre handlinger, og denne betingede virkemåten kan påvirke automatiserte tester.
Utfordringer med samtykkedialoger i testing
En av utfordringene med samtykkedialoger er at de kan gjøre tester ikke-deterministiske. Ledeteksten kan vises betinget basert på ulike faktorer, for eksempel brukertillatelser eller tidligere samhandlinger. Dette betingede utseendet kan komplisere testprosessen, ettersom testmotoren må håndtere disse dialogboksene på riktig måte.
Abstrahering av kompleksitet med Power Fx
Power Fx Hjelper med å abstrahere kompleksiteten ved betinget å vente på samtykkedialogen og opprette forbindelser om nødvendig. Utviklere kan bruke Power Fx til å definere logikken for å håndtere samtykkedialogbokser på en enklere og mer intuitiv måte.
Eksempel: Håndtere samtykkedialog med Power Fx
Her er et eksempel på hvordan du bruker Power Fx til å håndtere en samtykkedialogboks på en egendefinert side:
Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))
I dette eksemplet ConsentDialog sjekker funksjonen om samtykkedialogen er synlig. Hvis den er det, kan funksjonen svare på dialogen som bekrefter samtykke for testkontoen. Når dialogboksen er håndtert, utføres de gjenværende testtrinnene.
Argumentet Table gjør at venteprosessen for samtykkedialogboks avsluttes hvis en etikett med den angitte teksten er synlig.
Utvide Power Fx testfunksjoner ved hjelp av C#
Følgende eksempel er et eksempel på disposisjonskode som kan brukes som utgangspunkt for å fullføre dette eksemplet:
// 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 eksempel forklaring
-
Navneområde og import: Importerer nødvendige navnerom og definerer
testengine.modulenavnerommet. -
Klassedefinisjon: Klassen
ConsentDialogFunctionarver fra ReflectionFunction og definerer den egendefinerte funksjonenConsentDialog. -
Konstruktør: Initialiserer funksjonen med nødvendige avhengigheter, inkludert
ITestInfraFunctions,ITestStateog ILogger. -
Utfør metode: Logger utførelsen og kaller
ExecuteAsyncmetoden for å håndtere samtykkedialogen. - ExecuteAsync-metode: Henter sidekonteksten og håndterer samtykkedialogen med et tidsavbrudd.