Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Fitur pratinjau tidak dibuat untuk penggunaan produksi dan mungkin memiliki fungsionalitas yang dibatasi. Fitur ini tersedia sebelum rilis resmi agar pelanggan bisa memperoleh akses awal dan memberikan tanggapan.
Microsoft Power Fx adalah bahasa low-code yang kuat yang digunakan Power Apps, dan dapat diperluas menggunakan C# untuk membuat fungsi pengujian kustom. Artikel ini menjelaskan cara membuat fungsi C# Power Fx test, memberikan pengalaman yang mulus bagi pembuat dan pengembang.
Model ekstensibilitas Power Apps 'tanpa tebing' dari Test Engine memastikan bahwa pengguna dapat memperluas kemampuan Power Apps Test Engine tanpa menabrak penghalang apa pun. Model ini memungkinkan pengembang membuat fungsi kustom menggunakan C#, yang dapat diintegrasikan Power Fx untuk menangani skenario yang kompleks.
Modul Mesin Uji
Modul mesin uji untuk Power Fx di dalam Test Engine dibuat menggunakan model ekstensibilitas. Anda dapat menggunakan kode produk sebagai contoh bagaimana Test Engine dapat diperluas.
Contoh dialog persetujuan
Berikut adalah contoh Power Fx fungsi yang menyediakan garis besar kode untuk menangani dialog persetujuan bersyarat dalam aplikasi kanvas.
Dialog izin adalah perintah yang muncul kepada pengguna, meminta izin mereka untuk mengakses sumber daya tertentu atau melakukan tindakan tertentu. Dialog ini sangat penting untuk menjaga keamanan dan memastikan bahwa pengguna mengetahui dan menyetujui tindakan yang diambil atas nama mereka.
Dialog persetujuan penting karena membantu mencegah akses dan tindakan yang tidak sah. Ini memastikan bahwa pengguna diberi tahu dan memberikan persetujuan eksplisit mereka sebelum operasi sensitif dilakukan. Ini penting dalam skenario di mana aplikasi perlu mengakses data pengguna atau melakukan tindakan dan perilaku bersyarat ini dapat memengaruhi pengujian otomatis.
Tantangan dengan dialog persetujuan dalam pengujian
Salah satu tantangan dengan dialog persetujuan adalah bahwa mereka dapat membuat tes nondeterministik. Perintah dapat muncul secara kondisional berdasarkan berbagai faktor, seperti izin pengguna atau interaksi sebelumnya. Tampilan bersyarat ini dapat memperumit proses pengujian, karena Test Engine perlu menangani dialog ini dengan tepat.
Mengabstraksi kompleksitas dengan Power Fx
Power Fx membantu mengabstraksi kompleksitas menunggu dialog izin secara kondisional dan membuat koneksi jika diperlukan. Pembuat dapat menggunakan Power Fx untuk menentukan logika untuk menangani dialog persetujuan dengan cara yang lebih mudah dan intuitif.
Contoh: Menangani dialog izin dengan Power Fx
Berikut adalah contoh penggunaan Power Fx untuk menangani dialog izin di halaman kustom:
Preview.ConsentDialog(Table({Text: "Center of Excellence Setup Wizard"}))
Dalam contoh ini, fungsi memeriksa ConsentDialog apakah dialog persetujuan terlihat. Jika ya, fungsi dapat merespons dialog yang mengonfirmasi persetujuan untuk akun pengujian. Setelah dialog ditangani, langkah-langkah pengujian yang tersisa dijalankan.
Argumen memungkinkan Table proses tunggu dialog persetujuan untuk keluar adalah label dengan teks yang disediakan terlihat.
Memperluas Power Fx fungsi pengujian menggunakan C#
Contoh berikut adalah contoh kode garis besar yang dapat digunakan sebagai titik awal untuk menyelesaikan contoh ini:
// 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
}
}
}
Penjelasan contoh ConsentDialogFunction
-
Namespace dan Impor: Mengimpor namespace yang diperlukan dan menentukan
testengine.modulenamespace. -
Definisi Kelas: Kelas
ConsentDialogFunctionmewarisi dari ReflectionFunction dan mendefinisikan fungsiConsentDialogkustom. -
Konstruktor: Menginisialisasi fungsi dengan dependensi yang diperlukan, termasuk
ITestInfraFunctions,ITestState, dan ILogger. -
Jalankan Metode: Mencatat eksekusi dan memanggil
ExecuteAsyncmetode untuk menangani dialog persetujuan. - Metode ExecuteAsync: Mengambil konteks halaman dan menangani dialog persetujuan dengan batas waktu.