Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Бележка
Функциите за предварителен преглед не са предназначени за производствена употреба и може да са с ограничена функционалност. Тези функции са достъпни преди официалното издание, за да могат клиентите да получат ранен достъп и да дадат обратна връзка.
Microsoft Power Fx е мощен език с нисък код, използван в Power Apps и може да бъде разширен с помощта на C# за създаване на персонализирани тестови функции. Тази статия обяснява как да създадете функция за C# Power Fx test, осигурявайки безпроблемна работа както за създателите, така и за разработчиците.
Моделът за разширяемост "без скали" на Power Apps Test Engine гарантира, че потребителите могат да разширят възможностите на тестовия двигател, Power Apps без да се сблъскват с бариери. Този модел позволява на разработчиците да създават персонализирани функции с помощта на C#, които могат да бъдат интегрирани Power Fx за обработка на сложни сценарии.
Тестови модули на двигателя
Модулите на тестовия двигател за Power Fx вътрешността на тестовата машина са изградени с помощта на модела на разширяемост. Можете да използвате кода на продукта като примери за това как може да се разшири тестовата машина.
Пример за диалогов прозорец за съгласие
Ето пример за Power Fx функция, която предоставя структурата на кода за обработка на диалогов прозорец за условно съгласие в приложение за платно.
Диалоговият прозорец за съгласие е подкана, която се появява на потребителите, като иска разрешение за достъп до определени ресурси или извършване на конкретни действия. Този диалог е от решаващо значение за поддържане на сигурността и гарантиране, че потребителите са наясно и са съгласни с действията, предприети от тяхно име.
Диалоговият прозорец за съгласие е важен, защото помага за предотвратяване на неупълномощен достъп и действия. Той гарантира, че потребителите са информирани и предоставят изричното си съгласие, преди да бъдат извършени каквито и да било чувствителни операции. Това е важно в сценарии, при които приложението трябва да получи достъп до потребителски данни или да извърши действия и това условно поведение може да повлияе на автоматизираните тестове.
Предизвикателства с диалогови прозорци за съгласие при тестване
Едно от предизвикателствата при диалоговите прозорци за съгласие е, че те могат да направят тестовете недетерминистични. Подканата може условно да се появи въз основа на различни фактори, като потребителски разрешения или предишни взаимодействия. Това условно появяване може да усложни процеса на тестване, тъй като тестовата машина трябва да обработва тези диалози по подходящ начин.
Абстрахиране на сложността с Power Fx
Power Fx помага да се абстрахира сложността на условното изчакване на диалоговия прозорец за съгласие и създаването на връзки, ако е необходимо. Създателите могат да използват Power Fx , за да дефинират логиката за обработка на диалогови прозорци за съгласие по по-ясен и интуитивен начин.
Пример: Обработка на диалогов прозорец за съгласие с Power Fx
Ето пример за използване Power Fx за обработка на диалогов прозорец за съгласие в персонализирана страница:
Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))
В този пример ConsentDialog функцията проверява дали диалоговият прозорец за съгласие е видим. Ако е така, функцията може да отговори на диалоговия прозорец, потвърждаващ съгласието за тестовия акаунт. След като диалоговият прозорец бъде обработен, се изпълняват останалите тестови стъпки.
Аргументът Table позволява на диалоговия прозорец за изчакване на съгласието да излезе, ако се вижда етикет с предоставения текст.
Разширяване Power Fx на тестовите функции с помощта на C#
Следващият пример е примерен код на структура, който може да се използва като отправна точка за завършване на този пример:
// 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
-
Пространство от имена и импортиране: Импортира необходимите пространства от имена и дефинира пространството от имена
testengine.module. -
Дефиниция на класа: Класът
ConsentDialogFunctionнаследява от ReflectionFunction и дефинира персонализираната функцияConsentDialog. -
Конструктор: Инициализира функцията с необходимите зависимости, включително
ITestInfraFunctionsITestStateи ILogger. -
Метод за изпълнение: Регистрира изпълнението и извиква
ExecuteAsyncметода за обработка на диалоговия прозорец за съгласие. - ExecuteAsync Method: Извлича контекста на страницата и обработва диалоговия прозорец за съгласие с време за изчакване.