Del via


API-referanse

Denne Power Platform Playwright-verktøysettet API-referanse dokumenterer offentlige klasser, metoder og typer du kan bruke til å automatisere ende-til-ende-testing av lerrets- og modelldrevne apper.

AppProvider

Inngangspunkt for å starte Power Platform-apper. Start én gang per test, og ring launch()deretter .

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

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

AppLaunchOptions

Alternativer som sendes til for å AppProvider.launch() konfigurere hvilken app som skal åpnes og hvordan.

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

Angir hvilken type Power Platform-app som skal startes.

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

AppLaunchMode

Bestemmer om appen åpnes i avspillingsmodus eller redigeringsmodus.

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

ModelDrivenAppPage

Returnert av AppProvider.getModelDrivenAppPage(). Gir tilgang til navigasjon og komponenter.

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

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

GridComponent

Bryter ag-rutenettet som brukes i modelldrevne listevisninger. Tilgang 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

Alternativer for å identifisere hvilken post som skal åpnes fra rutenettet.

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

Bryter Dynamics 365 kjøretid for skjema. Tilgang 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()

Kjører tilfeldig kode i nettleserens skjemakontekst med full tilgang til Xrm Client API:

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

Se API-testing gjennom skjemakontekst for detaljert bruk.


CommandingComponent

Bryter kommandolinjen for modelldrevne apper. Tilgang via ModelDrivenAppPage.commanding.

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

CanvasAppPage

Returnert av AppProvider.getCanvasAppPage(). Gir lerretet iframe frame locator.

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

GenUxPage

Returnert av AppProvider.getGenUxPage(). Gir samhandlinger med Power Apps Utviklerportal GenUX AI designer for å opprette, generere, inspisere og publisere modelldrevne apper fra AI-ledetekster.

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

Viser FrameLocator iframe for UCI Preview. Bruk denne egenskapen til å spørre genererte skjemaelementer direkte:

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

GenUxPage.verifyThoughtStreaming()

Ser etter midlertidige GenUX-strømmingsindikatorer, for eksempel tanketekst, Stopp-knapp og Agenttanker. Hver kontroll er best innsats – generering kan fullføres før alle indikatorer vises. Den eneste harde deklarasjonen er at strømming pågår eller "Your page is now generated" er synlig.

GenUxPage.searchAndPlayApp()

Returnerer null når Avspilling er deaktivert (appen er ennå ikke publisert) i stedet for å kaste en feil. Bruk test.skip() ved retur null :

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

Verktøyfunksjoner

Frittstående hjelpefunksjoner for vanlige konfigurasjons- og konfigurasjonsoppgaver.

buildCanvasAppUrlFromEnv

Leser CANVAS_APP_URL fra miljøet:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Returnerer banen til Power Apps lagringsstatusfilen for den angitte e-postmeldingen:

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

ConfigHelper

Gir konfigurasjonshjelpere, for eksempel kontroller om den bufrede lagringstilstanden er utløpt.

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

Locator-verktøy

Hjelpemetoder for å finne Power Apps kontroller i iframes.

LocatorUtils

Statiske metoder for å finne lerretsappkontroller og gallerielementer etter navn.

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

Typeeksport

Eksporter alle typer fra pakkeroten:

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

Neste trinn

Se også