แชร์ผ่าน


สร้างฟังก์ชัน C# Power Fx test (ดูตัวอย่าง)

หมายเหตุ

คุณลักษณะการแสดงตัวอย่างไม่ได้มีไว้สำหรับการนำไปใช้งานจริง และอาจมีการจำกัดฟังก์ชันการทำงาน คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการ เพื่อให้ลูกค้าสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น

Microsoft Power Fx เป็นภาษา low-code อันทรงพลังที่ใช้ใน Power Apps และสามารถขยายโดยใช้ C# เพื่อสร้างฟังก์ชันการทดสอบแบบกำหนดเองได้ บทความนี้จะอธิบายวิธีการสร้างฟังก์ชัน C# Power Fx test เพื่อมอบประสบการณ์ที่ราบรื่นสำหรับทั้งผู้สร้างและนักพัฒนา

โมเดลความสามารถในการขยาย 'ไม่มีหน้าผา' ของ Test Engine ช่วยให้ผู้ใช้สามารถขยายความสามารถของ Power Apps Test Engine ได้โดยไม่ประสบปัญหาใดๆ Power Apps โมเดลนี้ช่วยให้นักพัฒนาสามารถสร้างฟังก์ชันที่กำหนดเองได้โดยใช้ C# ซึ่งสามารถรวมเข้ากับ Power Fx เพื่อจัดการกับสถานการณ์ที่ซับซ้อนได้

โมดูลเครื่องยนต์ทดสอบ

โมดูลเครื่องมือทดสอบ สำหรับ ภายใน Test Engine ได้รับการสร้างขึ้นโดยใช้โมเดลความสามารถในการขยาย Power Fx คุณสามารถใช้รหัสผลิตภัณฑ์เป็นตัวอย่างในการขยาย Test Engine ได้

นี่คือตัวอย่างของฟังก์ชัน Power Fx ที่ให้โครงร่างของโค้ดในการจัดการกล่องโต้ตอบการยินยอมแบบมีเงื่อนไขในแอปพลิเคชัน canvas

กล่องโต้ตอบการยินยอม คือข้อความแจ้งเตือนที่ปรากฏต่อผู้ใช้เพื่อขออนุญาตเข้าถึงทรัพยากรบางอย่างหรือดำเนินการบางอย่าง กล่องโต้ตอบนี้มีความสำคัญต่อการรักษาความปลอดภัยและการทำให้แน่ใจว่าผู้ใช้รับทราบและยอมรับการดำเนินการที่ดำเนินการในนามของพวกเขา

ตัวอย่างกล่องโต้ตอบการยินยอมการเชื่อมต่อสำหรับแอปที่เชื่อมต่อกับไซต์ SharePoint

กล่องโต้ตอบการยินยอมมีความสำคัญเนื่องจากช่วยป้องกันการเข้าถึงและการกระทำที่ไม่ได้รับอนุญาต ช่วยให้มั่นใจว่าผู้ใช้ได้รับแจ้งและให้ความยินยอมอย่างชัดเจนก่อนที่จะมีการดำเนินการที่ละเอียดอ่อนใดๆ สิ่งนี้มีความสำคัญในสถานการณ์ที่แอปพลิเคชันจำเป็นต้องเข้าถึงข้อมูลผู้ใช้หรือดำเนินการ และพฤติกรรมตามเงื่อนไขนี้สามารถส่งผลต่อการทดสอบอัตโนมัติได้

ความท้าทายประการหนึ่งในการสนทนาขอความยินยอมคืออาจทำให้การทดสอบไม่แน่นอน ข้อความแจ้งเตือนอาจปรากฏขึ้นตามเงื่อนไขโดยขึ้นอยู่กับปัจจัยหลายประการ เช่น สิทธิ์ของผู้ใช้หรือการโต้ตอบก่อนหน้า การปรากฏแบบมีเงื่อนไขนี้สามารถทำให้กระบวนการทดสอบมีความซับซ้อน เนื่องจากโปรแกรมทดสอบจะต้องจัดการกล่องโต้ตอบเหล่านี้อย่างเหมาะสม

การแยกความซับซ้อนด้วย 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
  • Constructor: เริ่มต้นฟังก์ชันด้วยการอ้างอิงที่จำเป็น รวมถึง ITestInfraFunctions, ITestState และ ILogger
  • วิธีการดำเนินการ: บันทึกการดำเนินการและเรียกใช้วิธีการ ExecuteAsync เพื่อจัดการกล่องโต้ตอบการยินยอม
  • วิธี ExecuteAsync: ดึงบริบทของหน้าและจัดการกล่องโต้ตอบการยินยอมด้วยการหมดเวลา