Aracılığıyla paylaş


C# Power Fx test işlevi oluşturma (önizleme)

Not

Önizleme özellikleri, üretimde kullanıma yönelik değildir ve sınırlı işlevselliğe sahip olabilir. Bu özellikler, müşterilerin erken erişim elde etmesi ve geri bildirim sağlaması amacıyla resmi sürümden önce kullanıma sunulur.

Microsoft Power Fx kullanılan güçlü bir düşük kod dilidir Power Apps ve özel test işlevleri oluşturmak için C# kullanılarak genişletilebilir. Bu makalede, hem oluşturucular hem de geliştiriciler için sorunsuz bir deneyim sağlayan bir C# Power Fx test işlevinin nasıl oluşturulacağı açıklanmaktadır.

Test Engine'in 'uçurum yok' genişletilebilirlik modeli Power Apps , kullanıcıların herhangi bir engelle karşılaşmadan Test Engine'in Power Apps yeteneklerini genişletebilmelerini sağlar. Bu model, geliştiricilerin karmaşık senaryoları işlemek için tümleştirilebilen Power Fx C# kullanarak özel işlevler oluşturmasına olanak tanır.

Test Motoru modülleri

Test Altyapısı içi için Test motoru modülleri Power Fx , genişletilebilirlik modeli kullanılarak oluşturulmuştur. Ürün kodunu, Test Engine'in nasıl genişletilebileceğine dair örnekler olarak kullanabilirsiniz.

Aşağıda, bir tuval uygulamasında Power Fx koşullu onay iletişim kutusunu işlemek için kodun ana hatlarını sağlayan birişlev örneği verilmiştir.

Onay iletişim kutusu , kullanıcılara görünen ve belirli kaynaklara erişmek veya belirli eylemleri gerçekleştirmek için izinlerini isteyen bir istemdir. Bu iletişim kutusu, güvenliği sağlamak ve kullanıcıların kendi adlarına gerçekleştirilen eylemlerin farkında olmalarını ve bunları kabul etmelerini sağlamak için çok önemlidir.

Bir siteye bağlanan SharePoint bir uygulama için bağlantı onayı iletişim kutusu örneği.

Onay iletişim kutusu, yetkisiz erişimin ve eylemlerin önlenmesine yardımcı olduğu için önemlidir. Herhangi bir hassas işlem gerçekleştirilmeden önce kullanıcıların bilgilendirilmesini ve açık rızalarını vermelerini sağlar. Bu, uygulamanın kullanıcı verilerine erişmesi veya eylemler gerçekleştirmesi gereken senaryolarda önemlidir ve bu koşullu davranış otomatik testleri etkileyebilir.

Onay iletişim kutularıyla ilgili zorluklardan biri, testleri belirleyici olmayan hale getirebilmeleridir. İstem, kullanıcı izinleri veya önceki etkileşimler gibi çeşitli faktörlere bağlı olarak koşullu olarak görünebilir. Bu koşullu görünüm, Test Motorunun bu iletişim kutularını uygun şekilde işlemesi gerektiğinden test sürecini karmaşıklaştırabilir.

Karmaşıklığı soyutlama Power Fx

Power Fx Onay iletişim kutusunu koşullu olarak beklemenin ve gerekirse bağlantı oluşturmanın karmaşıklığını soyutlamaya yardımcı olur. Oluşturucular, onay iletişim kutularını daha basit ve sezgisel bir şekilde işleme mantığını tanımlamak için kullanabilir Power Fx .

Özel bir sayfada izin iletişim kutusunu işlemek için kullanmaya Power Fx ilişkin bir örnek aşağıda verilmiştir:

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

Bu örnekte işlev, ConsentDialog onay iletişim kutusunun görünür olup olmadığını denetler. Öyleyse, işlev test hesabı için onayı onaylayan iletişim kutusuna yanıt verebilir. İletişim kutusu işlendikten sonra, kalan test adımları yürütülür.

Bağımsız Table değişken, onay iletişim kutusunun bekleme işleminden çıkmasına izin verir, sağlanan metnin görünür olduğu bir etikettir.

C kullanarak test fonksiyonlarını genişletme Power Fx #

Aşağıdaki örnek, bu örneği tamamlamak için bir başlangıç noktası olarak kullanılabilecek örnek bir anahat kodudur:

// 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 örnek açıklaması

  • Namespace ve Imports: Gerekli ad alanlarını içe aktarır ve ad alanını tanımlar testengine.module .
  • Sınıf Tanımı: Sınıf ConsentDialogFunction , ReflectionFunction'tan devralır ve özel işlevi ConsentDialog tanımlar.
  • Oluşturucu: İşlevi, dahil ITestInfraFunctions olmak üzere ITestState gerekli bağımlılıklarla ve ILogger'la başlatır.
  • Yürütme Yöntemi: Yürütmeyi günlüğe kaydeder ve onay iletişim kutusunu işlemek için yöntemi çağırır ExecuteAsync .
  • ExecuteAsync Yöntemi: Sayfa bağlamını alır ve onay iletişim kutusunu bir zaman aşımıyla işler.