מדריך רפרנס של API

ממשק 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';

השלבים הבאים

למידע נוסף