Нотатка
Доступ до цієї сторінки потребує авторизації. Можна спробувати ввійти або змінити каталоги.
Доступ до цієї сторінки потребує авторизації. Можна спробувати змінити каталоги.
Нотатка
Підготовчі функції призначені для невиробничого використання і можуть бути обмежені. Ці функції доступні до офіційного випуску, щоб клієнти могли ознайомитися з ними заздалегідь і залишити відгуки.
Microsoft Power Fx це потужна low-code мова, яка використовується в, Power Apps і її можна розширити за допомогою C# для створення користувацьких тестових функцій. У цій статті пояснюється, як створити функцію C# Power Fx test, що забезпечує безперебійну роботу як для виробників, так і для розробників.
Модель Power Apps розширюваності Test Engine «без обривів» гарантує, що користувачі можуть розширити можливості тестового Power Apps двигуна без зіткнення з жодними перешкодами. Ця модель дозволяє розробникам створювати власні функції за допомогою C#, які можна інтегрувати для Power Fx обробки складних сценаріїв.
Модулі тестового двигуна
Модулі тестового двигуна для Power Fx внутрішнього тестового двигуна побудовані з використанням моделі розтяжності. Ви можете використовувати код продукту як приклад того, як можна розширити Test Engine.
Приклад діалогового вікна згоди
Ось приклад Power Fx функції, яка надає контур коду для обробки діалогового вікна умовної згоди в програмі canvas.
Діалогове вікно згоди – це підказка, яка з’являється у користувачів із запитом дозволу на доступ до певних ресурсів або виконання певних дій. Цей діалог має вирішальне значення для підтримки безпеки та забезпечення того, щоб користувачі знали та погоджувалися з діями, які вживаються від їхнього імені.
Діалогове вікно згоди є важливим, оскільки воно допомагає запобігти несанкціонованому доступу та діям. Це гарантує, що користувачі поінформовані та надають свою явну згоду перед виконанням будь-яких конфіденційних операцій. Це важливо в сценаріях, коли додатку потрібно отримати доступ до даних користувача або виконати дії, і така умовна поведінка може вплинути на автоматизовані тести.
Проблеми з діалогами згоди в тестуванні
Одна з проблем діалогів про згоду полягає в тому, що вони можуть зробити тести недетермінованими. Запит може умовно з’являтися на основі різних факторів, таких як дозволи користувача або попередні взаємодії. Цей умовний вигляд може ускладнити процес тестування, оскільки тестовий двигун повинен обробляти ці діалогові вікна належним чином.
Складність абстрагування за допомогою 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. -
Конструктор: ініціалізує функцію необхідними залежностями, включаючи
ITestInfraFunctions,ITestState, та ILogger. -
Метод виконання: реєструє виконання та викликає
ExecuteAsyncметод для обробки діалогового вікна згоди. - Метод ExecuteAsync: отримує контекст сторінки та обробляє діалогове вікно згоди з тайм-аутом.