Referenca API-ja

Ovaj API komplet alata Power Platform Playwright referencira dokumente javnih klasa, metoda i vrsta koje možete koristiti za automatizaciju testiranja platna i aplikacija utemeljenih na modelu.

AppProvider

Ulazna točka za pokretanje aplikacija platforme Power Platform. Instancirajte jednom po testu, a zatim nazovite launch().

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

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

AppLaunchOptions

Mogućnosti proslijeđene AppProvider.launch() da bi se konfigurirala koja se aplikacija otvara i kako.

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

Određuje vrstu aplikacije Power Platform koja će se pokrenuti.

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

AppLaunchMode

Određuje otvara li se aplikacija u načinu reprodukcije ili načinu uređivanja.

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

ModelDrivenAppPage

AppProvider.getModelDrivenAppPage()Vratio . Omogućuje navigaciju i pristup komponentama.

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

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

GridComponent

Prelama rešetku AG koja se koristi u prikazima popisa utemeljenima na modelu. Pristupa se putem .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

Mogućnosti prepoznavanja zapisa koji će se otvoriti iz rešetke.

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

Prelama Dynamics 365 izvođenja obrasca. Pristupa se putem .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()

Pokreće proizvoljni kod u kontekstu obrasca preglednika s potpunim pristupom Xrm klijentskom API-ju:

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

Detaljne informacije o korištenju potražite u članku Testiranje API-ja putem konteksta obrasca.


CommandingComponent

Prelama traku naredbi aplikacije utemeljene na modelu. Pristupa se putem .ModelDrivenAppPage.commanding

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

CanvasAppPage

AppProvider.getCanvasAppPage()Vratio . Pruža lokator okvira iframe platna.

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

GenUxPage

AppProvider.getGenUxPage()Vratio . Pruža interakcije s dizajnerom Power Apps GenUX AI dizajnera za stvaranje, generiranje, provjeru i objavljivanje aplikacija utemeljenih na modelu iz upita AI-ja.

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

Izlaže FrameLocator okvir iframe pretpregleda za UCI. Koristite ovo svojstvo za izravno slanje upita generiranim elementima obrasca:

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

GenUxPage.verifyThoughtStreaming()

Provjerava prolazne genUX pokazatelje strujanja, kao što su tekst koji se misli, gumb Zaustavi i Misli agenta. Svaka provjera je najbolji napor – generiranje se može dovršiti prije nego što se pojave svi pokazatelji. Jedina tvrda tvrdnja je da je strujanje u tijeku ili je "Your page is now generated" vidljivo.

GenUxPage.searchAndPlayApp()

Vraća null kada je reprodukcija onemogućena (aplikacija još nije objavljena) umjesto da se prikazuje pogreška. Koristi test.skip() se za null povrat:

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

Uslužne funkcije

Samostalne funkcije pomoćnog programa za uobičajene zadatke postavljanja i konfiguracije.

buildCanvasAppUrlFromEnv

Čita iz CANVAS_APP_URL okruženja:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Vraća put do datoteke stanja Power Apps za navedenu poruku e-pošte:

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

ConfigHelper

Nudi pomoć za konfiguraciju, kao što je provjera je li predmemorirano stanje pohrane isteklo.

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

Lokator uslužni programi

Načini pomoći za pronalaženje Power Apps unutar okvira iframes.

LocatorUtils

Statički načini pronalaženja kontrola aplikacije platna i stavki galerije po nazivu.

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

Vrsta izvoza

Izvoz svih vrsta iz korijenskog paketa:

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

Sljedeći koraci

Vidi također