Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Notă
Caracteristicile în regim de previzualizare nu sunt destinate utilizării în producție și pot avea funcționalitate restricționată. Aceste caracteristici sunt disponibile înainte de lansarea oficială, astfel încât clienții să poată obține acces din timp și să poată oferi feedback.
Microsoft Power Fx este un limbaj puternic de codare redusă, utilizat în Power Apps și poate fi extins folosind C# pentru a crea funcții de testare personalizate. Acest articol explică cum se creează o funcție de testare C# Power Fx , oferind o experiență perfectă atât pentru creatori, cât și pentru dezvoltatori.
Modelul de extensibilitate „fără obstacole” al motorului de testare asigură că utilizatorii pot extinde capacitățile acestuia fără a întâmpina bariere. Power Apps Power Apps Acest model permite dezvoltatorilor să creeze funcții personalizate folosind C#, care pot fi integrate în Power Fx pentru a gestiona scenarii complexe.
Module Test Engine
Modulele Motorului de testare din cadrul Power Fx Motorului de testare sunt construite folosind modelul de extensibilitate. Puteți folosi codul produsului ca exemple despre cum poate fi extins Test Engine.
Exemplu de dialog de consimțământ
Iată un exemplu de funcție Power Fx care oferă schița codului pentru gestionarea unui dialog de consimțământ condiționat într-o aplicație canvas.
O casetă de dialog de consimțământ este o solicitare care apare utilizatorilor, cerându-le permisiunea de a accesa anumite resurse sau de a efectua anumite acțiuni. Acest dialog este crucial pentru menținerea securității și pentru a se asigura că utilizatorii sunt conștienți de și sunt de acord cu acțiunile întreprinse în numele lor.
Caseta de dialog pentru consimțământ este importantă deoarece ajută la prevenirea accesului și a acțiunilor neautorizate. Acesta asigură că utilizatorii sunt informați și își dau consimțământul explicit înainte de efectuarea oricăror operațiuni sensibile. Acest lucru este important în scenariile în care aplicația trebuie să acceseze datele utilizatorului sau să efectueze acțiuni, iar acest comportament condițional ar putea afecta testele automate.
Provocări legate de dialogurile de consimțământ în testare
Una dintre provocările dialogurilor de consimțământ este că acestea pot face testele nedeterministe. Solicitarea poate apărea condiționat în funcție de diverși factori, cum ar fi permisiunile utilizatorului sau interacțiunile anterioare. Această apariție condiționată poate complica procesul de testare, deoarece motorul de testare trebuie să gestioneze aceste dialoguri în mod corespunzător.
Abstractizarea complexității cu Power Fx
Power Fx ajută la abstractizarea complexității așteptării condiționate a dialogului de consimțământ și a creării de conexiuni, dacă este necesar. Creatorii pot folosi Power Fx pentru a defini logica de gestionare a dialogurilor de consimțământ într-un mod mai simplu și intuitiv.
Exemplu: Dialogul de gestionare a consimțământului cu Power Fx
Iată un exemplu de utilizare a Power Fx pentru a gestiona un dialog de consimțământ într-o pagină personalizată:
Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))
În acest exemplu, funcția ConsentDialog verifică dacă este vizibilă caseta de dialog pentru consimțământ. Dacă este așa, funcția poate răspunde la dialogul de confirmare a consimțământului pentru contul de testare. Odată ce dialogul este gestionat, se execută pașii de testare rămași.
Argumentul Table permite închiderea procesului de așteptare a dialogului de consimțământ dacă este vizibilă o etichetă cu textul furnizat.
Extinderea funcțiilor de testare folosind C# Power Fx
Următorul exemplu este un cod de schiță eșantion care ar putea fi folosit ca punct de plecare pentru a completa acest exemplu:
// 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
}
}
}
Exemplu explicativ pentru funcția ConsentDialogFunction
-
Spațiu de nume și importuri: Importă spațiile de nume necesare și definește
testengine.modulespațiul de nume. -
Definiția clasei: Clasa
ConsentDialogFunctionmoștenește de la ReflectionFunction și definește funcția personalizatăConsentDialog. -
Constructor: Inițializează funcția cu dependențele necesare, inclusiv
ITestInfraFunctions,ITestStateși ILogger. -
Metodă de executare: Înregistrează execuția și apelează
ExecuteAsyncmetoda pentru a gestiona dialogul de consimțământ. - Metoda ExecuteAsync: Preia contextul paginii și gestionează dialogul de consimțământ cu o expirare.