Делите путем


Креирајте функцију Ц # Power Fx тест (преглед)

Белешка

Функције прегледа нису намењене за коришћење у производњи и могу да имају ограничене функционалности. Ове функције су доступне пре званичног објављивања како би клијенти могли раније да им приступе и пруже повратне информације.

Microsoft Power Fx је моћан језик са ниским кодом који се користи у Power Apps, а може се проширити помоћу Ц # за креирање прилагођених тестних функција. Овај чланак објашњава како креирати Ц # Power Fx тест функцију, пружајући беспрекорно искуство и за произвођаче и за програмере.

Модел проширивости Тест Енгине-а Power Apps "без литица" осигурава да корисници могу проширити могућности Power Apps Тест Енгине-а без ударања у било какве баријере. Овај модел омогућава програмерима да креирају прилагођене функције користећи Ц #, које се могу интегрисати у Power Fx за руковање сложеним сценаријима.

Тест Енгине модули

Модули Тест мотора за унутрашњост Power Fx Тест Енгине су изграђени коришћењем модела проширивости. Можете користити код производа као примере како се Тест Енгине може проширити.

Ево примера Power Fx функције која обезбеђује преглед кода за руковање дијалогом условне сагласности у апликацији платна.

Дијалог сагласности је упит који се појављује корисницима, тражећи њихову дозволу за приступ одређеним ресурсима или обављање одређених радњи. Овај дијалог је од кључног значаја за одржавање безбедности и обезбеђивање да су корисници свесни и да се слажу са акцијама које се предузимају у њихово име.

Пример дијалога сагласности за повезивање за апликацију која се повезује са сајтом SharePoint .

Дијалог сагласности је важан јер помаже у спречавању неовлашћеног приступа и акција. Обезбеђује да су корисници информисани и дају своју изричиту сагласност пре него што се изврше било какве осетљиве операције. Ово је важно у сценаријима у којима апликација треба да приступи корисничким подацима или изврши акције и ово условно понашање може утицати на аутоматизоване тестове.

Један од изазова са дијалогом сагласности је да они могу да учине тестове недетерминистичким. Упит се може условно појавити на основу различитих фактора, као што су корисничке дозволе или претходне интеракције. Овај условни изглед може компликовати процес тестирања, јер Тест Енгине треба да на одговарајући начин рукује овим дијалозима.

Апстрактна сложеност са Power Fx

Power Fx помаже апстрахирати сложеност условног чекања дијалога сагласности и стварања веза ако је потребно. Произвођачи могу да дефинишу Power Fx логику за руковање дијалозима сагласности на једноставнији и интуитивнији начин.

Ево примера коришћења Power Fx за руковање дијалогом сагласности на прилагођеној страници:

Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))

У овом примеру, функција проверава ConsentDialog да ли је дијалог сагласности видљив. Ако јесте, функција може да одговори на дијалог који потврђује сагласност за тест налог. Када се дијалог обрађује, извршавају се преостали кораци теста.

Аргумент Table омогућава дијалог сагласности процес чекања да изађе је ознака са обезбеђеним текстом је видљива.

Проширење Power Fx тест функција помоћу Ц#

Следећи пример је узорак оквирног кода који се може користити као полазна тачка за завршетак овог примера:

// 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
        }
    }
}

ЦонсентДиалогФунцтион пример објашњења

  • Именски простор и увоз: Увози неопходне именске просторе и дефинисање именског testengine.module простора.
  • Дефиниција класе: Класа ConsentDialogFunction наслеђује од РефлецтионФунцтион и дефинише прилагођену функцију ConsentDialog.
  • Конструктор : Иницијализује функцију са потребним зависностима, укључујући ITestInfraFunctions и ITestState ИЛоггер.
  • Екецуте Метход : Евидентира извршење и позива ExecuteAsync метод за руковање дијалогом сагласности.
  • ЕкецутеАсинц Метход : Преузима контекст странице и обрађује дијалог сагласности са временским ограничењем.