Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Notatka
Funkcje w wersji zapoznawczej nie są przeznaczone do użytku w środowiskach produkcyjnych i mogą mieć ograniczoną funkcjonalność. Te funkcje są udostępniane przed oficjalnym wydaniem, dzięki czemu klienci mogą szybciej uzyskać do nich dostęp i przekazać opinie na ich temat.
Microsoft Power Fx to potężny język z małą ilością kodu używany w Power Apps języku C, który można rozszerzyć przy użyciu języka C# do tworzenia niestandardowych funkcji testowych. W tym artykule wyjaśniono, jak utworzyć funkcję C# Power Fx test, zapewniając bezproblemowe środowisko zarówno twórcom, jak i deweloperom.
Model rozszerzalności silnika testowego Power Apps "bez klifów" zapewnia, że użytkownicy mogą rozszerzać możliwości Power Apps silnika testowego bez napotykania jakichkolwiek barier. Ten model umożliwia deweloperom tworzenie niestandardowych funkcji przy użyciu języka C#, z którymi można zintegrować się w Power Fx celu obsługi złożonych scenariuszy.
Moduły silnika testowego
Moduły aparatu testowego dla Power Fx wewnętrznego aparatu testowego są kompilowane przy użyciu modelu rozszerzalności. Możesz użyć kodu produktu jako przykładów, w jaki sposób można rozszerzyć Test Engine.
Przykład okna dialogowego zgody
Oto przykład Power Fx funkcji, która udostępnia konspekt kodu do obsługi okna dialogowego zgody warunkowej w aplikacji kanwy.
Okno dialogowe zgody to monit, który pojawia się dla użytkowników, z prośbą o pozwolenie na dostęp do określonych zasobów lub wykonanie określonych działań. Ten dialog ma kluczowe znaczenie dla utrzymania bezpieczeństwa i zapewnienia, że użytkownicy są świadomi i zgadzają się na działania podejmowane w ich imieniu.
Okno dialogowe zgody jest ważne, ponieważ pomaga zapobiegać nieautoryzowanemu dostępowi i działaniom. Zapewnia, że użytkownicy są poinformowani i wyrażają wyraźną zgodę przed wykonaniem jakichkolwiek poufnych operacji. Jest to ważne w scenariuszach, w których aplikacja musi uzyskać dostęp do danych użytkownika lub wykonać akcje, a to warunkowe zachowanie może mieć wpływ na testy automatyczne.
Wyzwania związane z oknami dialogowymi zgody w testowaniu
Jednym z wyzwań związanych z oknami dialogowymi zgody jest to, że mogą one sprawić, że testy będą niedeterministyczne. Monit może być wyświetlany warunkowo na podstawie różnych czynników, takich jak uprawnienia użytkownika lub poprzednie interakcje. To warunkowe pojawienie się może skomplikować proces testowania, ponieważ silnik testowy musi odpowiednio obsługiwać te okna dialogowe.
Abstrahowanie złożoności za pomocą Power Fx
Power Fx Pomaga uzmysłowić sobie warunkowe oczekiwanie na okno dialogowe zgody i tworzenie połączeń w razie potrzeby. Twórcy mogą zdefiniować Power Fx logikę obsługi okien dialogowych zgody w bardziej prosty i intuicyjny sposób.
Przykład: Obsługa okna dialogowego zgody za pomocą Power Fx
Oto przykład użycia Power Fx do obsługi okna dialogowego zgody na stronie niestandardowej:
Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))
W tym przykładzie funkcja sprawdza, ConsentDialog czy okno dialogowe zgody jest widoczne. Jeśli tak, funkcja może odpowiedzieć na okno dialogowe potwierdzające zgodę na konto testowe. Po obsłużeniu okna dialogowego wykonywane są pozostałe kroki testu.
Argument Table zezwala na zakończenie procesu oczekiwania okna dialogowego zgody, jeśli widoczna jest etykieta z podanym tekstem.
Rozszerzanie Power Fx funkcji testowych za pomocą języka C#
Poniższy przykład to przykładowy kod konspektu, który może służyć jako punkt wyjścia do ukończenia tego przykładu:
// 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
}
}
}
Wyjaśnienie przykładu ConsentDialogFunction
-
Przestrzeń nazw i importy: Importuje niezbędne przestrzenie nazw i definiuje
testengine.moduleprzestrzeń nazw. -
Definicja klasy: Klasa
ConsentDialogFunctiondziedziczy z ReflectionFunction i definiuje funkcjęConsentDialogniestandardową. -
Konstruktor: inicjuje funkcję z niezbędnymi zależnościami, w tym
ITestInfraFunctions,ITestStatei ILogger. -
Execute Method (Metoda wykonywania): rejestruje wykonywanie i wywołuje
ExecuteAsyncmetodę w celu obsługi okna dialogowego zgody. - Metoda ExecuteAsync: pobiera kontekst strony i obsługuje okno dialogowe zgody z limitem czasu.