שתף דרך


יצירת פונקציית בדיקה ב-C# Power Fx (תצוגה מקדימה)

הערה

תכונות Preview אינן מיועדות לשימוש בסביבת ייצור, והפונקציונליות שלהן עשויה להיות מוגבלת. תכונות אלו זמינות לפני הפרסום הרשמי כך שלקוחות יוכלו לקבל גישה מוקדמת ולספק משוב.

Microsoft Power Fx היא שפת קוד נמוך עוצמתית המשמשת ב- Power Apps, וניתן להרחיב אותה באמצעות C# כדי ליצור פונקציות בדיקה מותאמות אישית. מאמר זה מסביר כיצד ליצור פונקציית בדיקה ב-C# Power Fx , המספקת חוויה חלקה הן ליוצרים והן למפתחים.

מודל ההרחבה 'ללא צוקים' של Power Apps מנוע הבדיקה> מבטיח שמשתמשים יוכלו להרחיב את יכולות Power Apps מנוע הבדיקה> מבלי להיתקל במכשולים. מודל זה מאפשר למפתחים ליצור פונקציות מותאמות אישית באמצעות C#, אשר ניתן לשלבן כדי להתמודד עם תרחישים מורכבים. Power Fx

מודולי מנוע בדיקה

מודולי מנוע הבדיקה עבור Power Fx בתוך מנוע הבדיקה בנויים באמצעות מודל ההרחבה. ניתן להשתמש בקוד המוצר כדוגמה לאופן שבו ניתן להרחיב את Test Engine.

הנה דוגמה לפונקציה Power Fx המספקת את מתווה הקוד לטיפול בתיבת דו-שיח של הסכמה מותנית ב אפליקציית קנבס.

תיבת דו-שיח להסכמה היא בקשה המופיעה למשתמשים, המבקשת את אישורם לגשת למשאבים מסוימים או לבצע פעולות ספציפיות. ... דיאלוג זה חיוני לשמירה על האבטחה ולהבטחת שהמשתמשים מודעים לפעולות המבוצעות בשמם ומסכימים להן.

דוגמה לתיבת דו-שיח של הסכמת חיבור עבור אפליקציה המתחברת לאתר. SharePoint

דיאלוג ההסכמה חשוב משום שהוא מסייע במניעת גישה ופעולות לא מורשות. זה מבטיח שהמשתמשים יהיו מודעים ויספקו את הסכמתם המפורשת לפני ביצוע כל פעולה רגישה. זה חשוב בתרחישים שבהם היישום צריך לגשת לנתוני משתמש או לבצע פעולות והתנהגות מותנית זו עלולה להשפיע על בדיקות אוטומטיות.

אחד האתגרים בדיאלוגים של הסכמה הוא שהם יכולים להפוך את הבדיקות ללא דטרמיניסטיות. ההנחיה יכולה להופיע באופן מותנה בהתבסס על גורמים שונים, כגון הרשאות משתמש או אינטראקציות קודמות. מראה מותנה זה יכול לסבך את תהליך הבדיקה, מכיוון שמנוע הבדיקה צריך לטפל בדיאלוגים אלה כראוי.

הפשטת מורכבות עם Power Fx

Power Fx מסייע לפשט את המורכבות של המתנה מותנית לדיאלוג ההסכמה ויצירת קשרים במידת הצורך. יוצרים יכולים להשתמש בו Power Fx כדי להגדיר את ההיגיון לטיפול בדיאלוגי הסכמה בצורה פשוטה ואינטואיטיבית יותר.

הנה דוגמה לשימוש ב Power Fx לטיפול בתיבת דו-שיח של הסכמה בדף מותאם אישית:

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

בדוגמה זו, הפונקציה ConsentDialog בודקת אם תיבת הדו-שיח להסכמה גלויה. אם כן, הפונקציה יכולה להגיב לתיבת הדו-שיח המאשרת את הסכמתה לחשבון הבדיקה. לאחר טיפול בדיאלוג, שלבי הבדיקה הנותרים מבוצעים.

הארגומנט Table מאפשר לתהליך ההמתנה של תיבת הדו-שיח להסכמה להסתיים אם תווית עם הטקסט שסופק גלויה.

הרחבת פונקציות בדיקה באמצעות C# 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
        }
    }
}

הסבר לדוגמה של ConsentDialogFunction

  • מרחב שמות וייבוא: ייבוא מרחבי שמות נחוצים והגדרת testengine.module מרחב השמות.
  • הגדרת מחלקה: המחלקה ConsentDialogFunction יורשת את ReflectionFunction ומגדירה את הפונקציה המותאמת אישית ConsentDialog.
  • בנאי: מאתחל את הפונקציה עם תלויות נחוצות, כולל ITestInfraFunctions, ITestState, ו- ILogger.
  • שיטת ביצוע: רושמת את הביצוע וקוראת לשיטה ExecuteAsync לטיפול בתיבת הדו-שיח של ההסכמה.
  • שיטת ExecuteAsync: מאחזרת את הקשר הדף ומטפלת בתיבת הדו-שיח להסכמה עם פסק זמן.