API nuoroda

Ši "Power Platform Playwright" įrankių rinkinio API nurodo dokumentus, viešąsias klases, metodus ir tipus, kuriuos galite naudoti norėdami automatizuoti drobės ir modeliu pagrįstų programėlių tikrinimą.

AppProvider

"Power Platform" programų paleidimo įvesties vieta. Sukurkite egzempliorių vieną kartą per testą, tada iškvieskite launch().

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

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

AppLaunchOptions

Perduotos parinktys, kad būtų AppProvider.launch() galima konfigūruoti, kurią programą atidaryti ir kaip.

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

Nurodo "Power Platform" taikomosios programos, kurią norite paleisti, tipą.

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

AppLaunchMode

Nustatoma, ar programa atidaroma paleidimo, ar redagavimo režimu.

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

ModelDrivenAppPage

Grąžino AppProvider.getModelDrivenAppPage(). Suteikia naršymo ir komponento prieigą.

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

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

GridComponent

Apvyniojamas AG tinklelis , naudojamas modelio valdomų sąrašo rodiniuose. Pasiekiama per 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

Parinktys, skirtos nustatyti, kurį įrašą atidaryti tinklelyje.

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

Kelia Dynamics 365 formos vykdyklę. Pasiekiama per 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()

Paleidžia savavališką kodą naršyklės formos kontekste su visiška prieiga prie "Xrm Client" API:

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

Išsamų naudojimą žr. API tikrinimas naudojant formos kontekstą .


CommandingComponent

Kelia modeliu pagrįstos programos komandų juostą. Pasiekiama per ModelDrivenAppPage.commanding.

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

CanvasAppPage

Grąžino AppProvider.getCanvasAppPage(). Suteikia drobės "iframe" rėmelio lokatorių.

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

GenUxPage

Grąžino AppProvider.getGenUxPage(). Pateikia sąveiką su Power Apps maker portal GenUX AI dizaino įrankiu kuriant, generuojant, tikrinant ir publikuojant modeliu pagrįstas programas iš DI raginimų.

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

FrameLocator Atskleidžia "UCI Preview" "iframe". Naudokite šią ypatybę tiesiogiai užklausai apie sugeneruotus formos elementus:

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

GenUxPage.verifyThoughtStreaming()

Tikrina, ar nėra trumpalaikių "GenUX" srautinio perdavimo indikatorių, pvz., minčių teksto, stabdymo mygtuko ir agento minčių. Kiekviena patikra yra geriausia – generavimas gali būti baigtas, kol pasirodys visi indikatoriai. Vienintelis griežtas teiginys yra tai, kad vykdomas srautinis perdavimas arba "Your page is now generated" jis matomas.

GenUxPage.searchAndPlayApp()

Grąžina null , kai funkcija Leisti išjungta (programa dar nepublikuota), o ne pateikia klaidą. Naudoti test.skip() grąžinant null :

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

Naudingumo funkcijos

Atskiros pagalbinio priemonės funkcijos įprastoms sąrankos ir konfigūravimo užduotims atlikti.

buildCanvasAppUrlFromEnv

CANVAS_APP_URL Skaito iš aplinkos:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Grąžina nurodyto el. laiško Power Apps saugojimo būsenos failo kelią:

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

ConfigHelper

Pateikia konfigūravimo pagalbinius elementus, pvz., tikrina, ar talpyklos saugyklos būsena nebegalioja.

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

Locator utilities

Pagalbiniai būdai, kaip rasti Power Apps valdiklius "iFrame".

LocatorUtils

Statiniai drobės programos valdiklių ir galerijos elementų radimo pagal pavadinimą metodai.

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

Tipų eksportavimas

Eksportuoti visus tipus iš šakninio paketo:

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

Kiti veiksmai

Taip pat žiūrėkite