הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
ממשק API זה של ערכת כלים של Power Platform Playwright מפנה למסמכים כיתות ציבוריות, שיטות וסוגים שבהם ניתן להשתמש כדי להפוך בדיקות מקצה לקצה לאוטומטיות של בד ציור ואפליקציות מונחות מודלים.
AppProvider
נקודת כניסה להפעלת אפליקציות Power Platform. ליצור מופעים פעם אחת בכל בדיקה ולאחר מכן התקשר אל launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
אפשרויות הועברו אל כדי AppProvider.launch() לקבוע את תצורת האפליקציה שתפתח וכיצד.
interface AppLaunchOptions {
app: string; // Display name of the app
type: AppType; // Canvas | ModelDriven
mode: AppLaunchMode; // Play | Edit
skipMakerPortal?: boolean; // true: use directUrl, skip make.powerapps.com navigation
directUrl?: string; // Full URL when skipMakerPortal is true
}
AppType
מציין את סוג יישום Power Platform להפעלה.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
קובע אם האפליקציה נפתחת במצב הפעלה או במצב עריכה.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
הוחזר על-ידי AppProvider.getModelDrivenAppPage(). מספק גישה לניווט ולרכיבים.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
גלישת רשת AG המשמשת בתצוגות רשימה מונחות דגמים. גישה באמצעות ModelDrivenAppPage.grid.
class GridComponent {
waitForGridLoad(): Promise<void>
filterByKeyword(keyword: string): Promise<void>
filterByColumn(columnName: string, value: string): Promise<void>
getCellValue(rowIndex: number, columnName: string): Promise<string | null>
getRowCount(): Promise<number>
isGridEmpty(): Promise<boolean>
openRecord(options: OpenRecordOptions): Promise<void>
selectRow(rowIndex: number): Promise<void>
selectRows(rowIndexes: number[]): Promise<void>
}
OpenRecordOptions
אפשרויות לזיהוי הרשומה שיש לפתוח מהרשת.
interface OpenRecordOptions {
rowNumber?: number; // 0-based row index
columnName?: string; // column to match (display name or schema name)
columnValue?: string; // value to match in the column
}
FormComponent
גלישת Dynamics 365 זמן ריצה של טופס. גישה באמצעות ModelDrivenAppPage.form.
class FormComponent {
getAttribute(fieldName: string): Promise<string | null>
setAttribute(fieldName: string, value: string): Promise<void>
save(): Promise<void>
isDirty(): Promise<boolean>
isValid(): Promise<boolean>
navigateToTab(tabName: string): Promise<void>
setFieldVisibility(fieldName: string, visible: boolean): Promise<void>
setFieldDisabled(fieldName: string, disabled: boolean): Promise<void>
setFieldRequiredLevel(
fieldName: string,
level: 'none' | 'recommended' | 'required'
): Promise<void>
execute<T>(
fn: (formContext: Xrm.FormContext) => T | Promise<T>
): Promise<T>
}
FormComponent.execute()
הפעלת קוד שרירותי בהקשר הטופס של הדפדפן עם גישה מלאה ל- API של לקוח Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
ראה בדיקת API באמצעות הקשר טופס לקבלת שימוש מפורט.
CommandingComponent
גלישת סרגל הפקודות של האפליקציה מונחה הדגם. גישה באמצעות ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
הוחזר על-ידי AppProvider.getCanvasAppPage(). מספק את מאתר מסגרת iframe של בד הציור.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
הוחזר על-ידי AppProvider.getGenUxPage(). מספק אינטראקציות עם מעצב הבינה המלאכותית של Power Apps Maker Portal GenUX ליצירה, יצירה, בדיקה ופרסום של יישומים מונחי מודלים מהנחיות בינה מלאכותית.
class GenUxPage {
readonly previewFrame: FrameLocator // UCI Preview iframe locator
// Power Apps navigation
goToAppsPage(): Promise<void>
navigateToStartWithPageDesign(): Promise<void>
createAppWithName(appName: string): Promise<void>
addNewPage(): Promise<void>
// AI generation
waitForUCIPreviewFrameAndFillPrompt(prompt: string): Promise<void>
waitForUCIPreviewFrameAndSelectTemplate(templateText: string): Promise<void>
verifyThoughtStreaming(): Promise<void>
verifyCodeAndPreviewTabsAvailable(): Promise<void>
verifyCodeStreaming(): Promise<void>
// Inspection
clickPreviewTab(): Promise<void>
clickCodeTab(): Promise<void>
waitForGeneratedContent(): Promise<void>
waitForCodeTabContent(): Promise<void>
getPreviewTabDom(): Promise<string>
getCodeTabContent(): Promise<string>
// Publishing
publishApp(): Promise<void>
buildCanvasPlayUrl(): string
// Form interaction
submitForm(): Promise<void>
waitForSubmitSuccess(timeout?: number): Promise<void>
// App management
getAppIdFromUrl(): string
searchAndPlayApp(appName: string, context: BrowserContext): Promise<Page | null>
deleteAppsMatchingPrefix(prefix: string): Promise<void>
deleteAppFromAppListIfFound(appName: string): Promise<void>
}
GenUxPage.previewFrame
חשיפת for FrameLocator the UCI Preview iframe. השתמש במאפיין זה כדי לבצע שאילתה ישירות על רכיבי טופס שנוצרו:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
בדיקה אם קיימים מחווני הזרמת GenUX ארעיים, כגון טקסט מחשבה, לחצן עצור ומחשבות סוכן. כל בדיקה היא מאמץ מיטבי - ההפקה עשויה להסתיים לפני שכל המחוונים יופיעו. הקביעה הקשה היחידה היא שהזרימה מתבצעת או גלויה "Your page is now generated" .
GenUxPage.searchAndPlayApp()
חזרה null כאשר האפשרות הפעל אינה זמינה (היישום עדיין לא פורסם) במקום להציג הודעה על שגיאה. השתמש test.skip() בהחזרה null :
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
פונקציות כלי שירות
פונקציות עוזר עצמאיות עבור משימות הגדרה ותצורה נפוצות.
buildCanvasAppUrlFromEnv
CANVAS_APP_URL קורא מהסביבה:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
החזרת הנתיב אל קובץ מצב Power Apps עבור הודעת הדואר האלקטרוני הנתונה:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
מתן מסייעי תצורה, כגון בדיקה אם פג תוקפו של מצב האחסון המאוחסן במטמון.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
כלי שירות של מאתר
שיטות עוזרות באיתור Power Apps פקדים בתוך רכיבי iframes.
LocatorUtils
שיטות סטטיות לאיתור פקדים ופריטים בגלריה של בד ציור לפי שם.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
פעולות ייצוא של סוגים
יצא את כל הסוגים מתוך בסיס החבילה:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';