Referință API

Acest kit de instrumente Power Platform Playwright face referire la documente publice, metode și tipuri pe care le puteți utiliza pentru a automatiza testarea de la un capăt la alta a pânzei și a aplicațiilor bazate pe modele.

AppProvider

Punct de intrare pentru lansarea aplicațiilor Power Platform. Instanțiați o dată pe test, apoi apelați launch().

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

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

AppLaunchOptions

Opțiuni transmise pentru a AppProvider.launch() configura ce aplicație să deschidă și cum.

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

Specifică tipul de aplicație Power Platform de lansat.

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

AppLaunchMode

Determină dacă aplicația se deschide în modul de redare sau în modul de editare.

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

ModelDrivenAppPage

Returnat de AppProvider.getModelDrivenAppPage(). Oferă acces la navigare și componente.

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

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

GridComponent

Încadrează grila AG utilizată în vizualizările listă bazate pe modele. Accesat prin 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

Opțiuni pentru identificarea înregistrării care să se deschidă din grilă.

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

Încadrează modulul runtime al formularului Dynamics 365. Accesat prin 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()

Rulează cod arbitrar în contextul de formular al browserului, cu acces complet la API-ul client Xrm:

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

Consultați Testarea API prin intermediul contextului de formular pentru utilizare detaliată.


CommandingComponent

Încadrează bara de comenzi de aplicație bazată pe model. Accesat prin ModelDrivenAppPage.commanding.

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

CanvasAppPage

Returnat de AppProvider.getCanvasAppPage(). Furnizează locatorul cadru pentru pânză iframe.

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

GenUxPage

Returnat de AppProvider.getGenUxPage(). Oferă interacțiuni cu Power Apps proiectantul Maker Portal GenUX GenUX pentru crearea, generarea, inspectarea și publicarea aplicațiilor bazate pe modele de la solicitări ai.

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

Expune pentru iframe-ul FrameLocator UCI Preview. Utilizați această proprietate pentru a interoga direct elementele de formular generate:

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

GenUxPage.verifyThoughtStreaming()

Verifică dacă există indicatori de redare în flux GenUX tranzitorii, cum ar fi text gândit, butonul Oprire și Gânduri agent. Fiecare verificare este cel mai bun efort - generarea se poate finaliza înainte de a apărea toți indicatorii. Singura afirmație dificilă este că redarea în flux este în curs sau "Your page is now generated" este vizibilă.

GenUxPage.searchAndPlayApp()

Returnează null atunci când Este dezactivat Redare (aplicația nu este încă publicată) în loc să genereze o eroare. Se utilizează test.skip() într-o null returnare:

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

Funcțiile utilitare

Funcții independente de ajutor pentru activitățile uzuale de configurare și configurare.

buildCanvasAppUrlFromEnv

Citește CANVAS_APP_URL din mediu:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Returnează calea către fișierul de stare de stocare Power Apps pentru mesajul de e-mail dat:

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

ConfigHelper

Oferă ajutor pentru configurare, cum ar fi verificarea dacă starea de stocare memorată în cache a expirat.

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

Utilitare locator

Metode de ajutor pentru localizarea controalelor Power Apps în cadrul iframe-uri.

LocatorUtils

Metode statice pentru găsirea controalelor aplicației pânză și a elementelor din galerie după nume.

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

Exporturi de tipuri

Se exportă toate tipurile din rădăcina pachetului:

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

Pașii următori

Vedeți și