API-referens

Det här API:et för Power Platform Playwright-verktygen refererar till offentliga klasser, metoder och typer som du kan använda för att automatisera testning från slutpunkt till slutpunkt av arbetsytor och modelldrivna appar.

AppProvider

Startpunkt för att starta Power Platform-appar. Instansiera en gång per test och anropa launch()sedan .

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

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

AppLaunchOptions

Alternativ som skickas till AppProvider.launch() för att konfigurera vilken app som ska öppnas och hur.

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

Anger vilken typ av Power Platform-app som ska startas.

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

AppLaunchMode

Avgör om appen öppnas i uppspelningsläge eller redigeringsläge.

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

ModelDrivenAppPage

Returneras av AppProvider.getModelDrivenAppPage(). Ger navigerings- och komponentåtkomst.

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

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

GridComponent

Omsluter ag-rutnätet som används i modelldrivna listvyer. Nås 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

Alternativ för att identifiera vilken post som ska öppnas från rutnätet.

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

Omsluter Dynamics 365 formulärkörning. Nås 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()

Kör godtycklig kod i webbläsarens formulärkontext med fullständig åtkomst till Xrm-klient-API:et:

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

Se API-testning via formulärkontext för detaljerad användning.


CommandingComponent

Omsluter kommandofältet för den modelldrivna appen. Nås via ModelDrivenAppPage.commanding.

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

CanvasAppPage

Returneras av AppProvider.getCanvasAppPage(). Tillhandahåller positioneraren för arbetsytans iframe-ram.

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

GenUxPage

Returneras av AppProvider.getGenUxPage(). Tillhandahåller interaktioner med Power Apps Maker Portal GenUX AI Designer för att skapa, generera, inspektera och publicera modelldrivna appar från AI-prompter.

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

Exponerar FrameLocator för UCI Preview iframe. Använd den här egenskapen om du vill köra frågor mot genererade formulärelement direkt:

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

GenUxPage.verifyThoughtStreaming()

Söker efter tillfälliga GenUX-strömningsindikatorer, till exempel tanketext, stoppknapp och agenttankar. Varje kontroll är bäst – genereringen kan slutföras innan alla indikatorer visas. Det enda hårda påståendet är att strömning pågår eller "Your page is now generated" är synligt.

GenUxPage.searchAndPlayApp()

Returnerar null när Uppspelning är inaktiverat (appen har ännu inte publicerats) i stället för att utlösa ett fel. Använd test.skip() vid en null retur:

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

Verktygsfunktioner

Fristående hjälpfunktioner för vanliga konfigurations- och konfigurationsuppgifter.

buildCanvasAppUrlFromEnv

Läsningar CANVAS_APP_URL från miljön:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Returnerar sökvägen till lagringstillståndsfilen Power Apps för det angivna e-postmeddelandet:

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

ConfigHelper

Tillhandahåller konfigurationshjälp, till exempel att kontrollera om det cachelagrade lagringstillståndet har upphört att gälla.

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

Positionerarverktyg

Hjälpmetoder för att hitta Power Apps kontroller i iframes.

LocatorUtils

Statiska metoder för att hitta appkontroller för arbetsytor och galleriobjekt efter namn.

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

Typexport

Exportera alla typer från paketroten:

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

Nästa steg

Se även