Freigeben über


API-Referenz

Diese Power Platform Playwright-Toolkit-API referenzieren öffentliche Klassen, Methoden und Typen, mit deren Hilfe Sie End-to-End-Tests von Canvas- und modellgesteuerten Apps automatisieren können.

AppProvider

Einstiegspunkt für das Starten von Power Platform-Apps. Instanziieren Sie einmal pro Test, und rufen Sie dann auf launch().

class AppProvider {
  constructor(page: Page, context: BrowserContext)

  launch(options: AppLaunchOptions): Promise<void>
  getModelDrivenAppPage(): ModelDrivenAppPage
  getCanvasAppPage(): CanvasAppPage
  getGenUxPage(): GenUxPage
}

AppLaunchOptions

Optionen, die übergeben werden, um AppProvider.launch() zu konfigurieren, welche App geöffnet werden soll und wie.

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

Gibt den Typ der zu startenden Power Platform-App an.

enum AppType {
  Canvas = 'canvas',
  ModelDriven = 'model-driven',
}

AppLaunchMode

Bestimmt, ob die App im Wiedergabemodus oder im Bearbeitungsmodus geöffnet wird.

enum AppLaunchMode {
  Play = 'play',
  Edit = 'edit',
}

ModelDrivenAppPage

Zurückgegeben von AppProvider.getModelDrivenAppPage(). Bietet Navigations- und Komponentenzugriff.

class ModelDrivenAppPage {
  readonly grid: GridComponent
  readonly form: FormComponent
  readonly commanding: CommandingComponent

  navigateToGridView(entityLogicalName: string): Promise<void>
  navigateToFormView(entityLogicalName: string): Promise<void>
}

GridComponent

Umschließt das AG-Raster , das in modellgesteuerten Listenansichten verwendet wird. Zugriff über 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

Optionen zum Identifizieren, welcher Datensatz aus dem Raster geöffnet werden soll.

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

Umschließt die Dynamics 365 Formularlaufzeit. Zugriff über 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()

Führt beliebigen Code im Formularkontext des Browsers mit vollständigem Zugriff auf die Xrm-Client-API aus:

const value = await mda.form.execute(
  (ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);

Ausführliche Verwendung finden Sie unter API-Tests über den Formularkontext .


CommandingComponent

Umschließt die modellgesteuerte App-Befehlsleiste. Zugriff über ModelDrivenAppPage.commanding.

class CommandingComponent {
  clickButton(ariaLabel: string): Promise<void>
  clickMoreCommands(): Promise<void>
}

CanvasAppPage

Zurückgegeben von AppProvider.getCanvasAppPage(). Stellt den Canvas-iframe-Frame-Locator bereit.

class CanvasAppPage {
  getFrame(): FrameLocator
  waitForLoad(controlName?: string): Promise<void>
}

GenUxPage

Zurückgegeben von AppProvider.getGenUxPage(). Bietet Interaktionen mit dem Power Apps Maker Portal GenUX AI Designer zum Erstellen, Generieren, Prüfen und Veröffentlichen modellgesteuerter Apps aus KI-Eingabeaufforderungen.

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

Macht den FrameLocator UCI Preview iframe verfügbar. Verwenden Sie diese Eigenschaft, um generierte Formularelemente direkt abzufragen:

const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();

GenUxPage.verifyThoughtStreaming()

Sucht nach vorübergehenden GenUX-Streamingindikatoren, z. B. gedankentext, Schaltfläche "Beenden" und "Agent Gedanken". Jede Überprüfung ist am besten bemüht – die Generierung kann abgeschlossen werden, bevor alle Indikatoren angezeigt werden. Die einzige harte Behauptung besteht darin, dass entweder Streaming ausgeführt wird oder "Your page is now generated" sichtbar ist.

GenUxPage.searchAndPlayApp()

Gibt zurück null , wenn "Wiedergeben" deaktiviert ist (die App wird noch nicht veröffentlicht), anstatt einen Fehler zu auslösen. Verwenden sie test.skip() für eine null Rückgabe:

const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();

Hilfsprogrammfunktionen

Eigenständige Hilfsfunktionen für allgemeine Setup- und Konfigurationsaufgaben.

buildCanvasAppUrlFromEnv

CANVAS_APP_URL Liest aus der Umgebung:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Gibt den Pfad zur Power Apps Speicherstatusdatei für die angegebene E-Mail zurück:

function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json

ConfigHelper

Stellt Konfigurationshilfsprogramme bereit, z. B. die Überprüfung, ob der Cachespeicherstatus abgelaufen ist.

class ConfigHelper {
  static checkStorageStateExpiration(
    statePath: string
  ): { expired: boolean; expiresOn?: number }
}

Locator-Dienstprogramme

Hilfsmethoden zum Suchen von Power Apps Steuerelementen in iframes.

LocatorUtils

Statische Methoden zum Suchen nach Canvas-App-Steuerelementen und Katalogelementen nach Namen.

class LocatorUtils {
  static getByControlName(frame: FrameLocator, controlName: string): Locator
  static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}

Typexporte

Alle Typen aus dem Paketstamm exportieren:

import {
  AppProvider,
  AppType,
  AppLaunchMode,
  AppLaunchOptions,
  ModelDrivenAppPage,
  GridComponent,
  FormComponent,
  CommandingComponent,
  CanvasAppPage,
  GenUxPage,
  buildCanvasAppUrlFromEnv,
  getStorageStatePath,
  ConfigHelper,
  LocatorUtils,
} from 'power-platform-playwright-toolkit';

Nächste Schritte

Siehe auch