API-referentie

Deze Power Platform Playwright toolkit-API verwijst naar openbare klassen, methoden en typen die u kunt gebruiken om end-to-end testen van canvas- en modelgestuurde apps te automatiseren.

AppProvider

Toegangspunt voor het starten van Power Platform-apps. Instantieer eenmaal per test en bel launch()vervolgens.

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

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

AppLaunchOptions

Opties die zijn doorgegeven om te AppProvider.launch() configureren welke app moet worden geopend en hoe.

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

Hiermee geeft u het type Power Platform-app op dat moet worden gestart.

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

AppLaunchMode

Bepaalt of de app wordt geopend in de afspeelmodus of de bewerkingsmodus.

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

ModelDrivenAppPage

Geretourneerd door AppProvider.getModelDrivenAppPage(). Biedt navigatie- en onderdeeltoegang.

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

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

GridComponent

Verpakt het AG-raster dat wordt gebruikt in modelgestuurde lijstweergaven. Toegankelijk via 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

Opties voor het identificeren van welke record moet worden geopend vanuit het raster.

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

Verpakt de Dynamics 365 formulierruntime. Toegankelijk via 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()

Hiermee wordt willekeurige code uitgevoerd in de formuliercontext van de browser met volledige toegang tot de Xrm-client-API:

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

Zie API-tests via formuliercontext voor gedetailleerd gebruik.


CommandingComponent

Verpakt de opdrachtbalk van de modelgestuurde app. Toegankelijk via ModelDrivenAppPage.commanding.

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

CanvasAppPage

Geretourneerd door AppProvider.getCanvasAppPage(). Biedt de canvas iframe frame locator.

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

GenUxPage

Geretourneerd door AppProvider.getGenUxPage(). Biedt interacties met de Power Apps Maker Portal GenUX AI Designer voor het maken, genereren, inspecteren en publiceren van modelgestuurde apps op basis van AI-prompts.

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

Hiermee wordt het FrameLocator iframe voor de UCI Preview weergegeven. Gebruik deze eigenschap om rechtstreeks query's uit te voeren op gegenereerde formulierelementen:

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

GenUxPage.verifyThoughtStreaming()

Controleert op tijdelijke GenUX-streaming-indicatoren, zoals gedachtetekst, knop Stoppen en Gedachten van agent. Elke controle is best-effort. Het genereren kan worden voltooid voordat alle indicatoren worden weergegeven. De enige harde bewering is dat streaming wordt uitgevoerd of "Your page is now generated" zichtbaar is.

GenUxPage.searchAndPlayApp()

Retourneert null wanneer Play is uitgeschakeld (app is nog niet gepubliceerd) in plaats van een fout te genereren. Gebruiken test.skip() op een null retour:

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

Hulpprogrammafuncties

Zelfstandige helperfuncties voor algemene installatie- en configuratietaken.

buildCanvasAppUrlFromEnv

Leesbewerkingen CANVAS_APP_URL uit de omgeving:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Retourneert het pad naar het Power Apps opslagstatusbestand voor de opgegeven e-mail:

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

ConfigHelper

Biedt configuratiehulpfuncties, zoals controleren of de opslagstatus in de cache is verlopen.

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

Locatorhulpprogramma's

Helpermethoden voor het vinden van Power Apps besturingselementen binnen iframes.

LocatorUtils

Statische methoden voor het vinden van besturingselementen voor canvas-apps en galerie-items op naam.

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

Type exports

Alle typen exporteren vanuit de hoofdmap van het pakket:

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

Volgende stappen 

Zie ook