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