Referència de l'API

Aquesta API de referència Power Platform Playwright documenta classes, mètodes i tipus públics que pots utilitzar per automatitzar proves de cap a fi d'aplicacions canvas i basades en models.

AppProvider

Punt d'entrada per llançar aplicacions de Power Platform. Instancia una vegada per prova i després truca launch()a .

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

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

AppLaunchOptions

Em van passar opcions per AppProvider.launch() configurar quina aplicació obrir i com.

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

Especifica quin tipus d'aplicació Power Platform s'ha de llançar.

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

AppLaunchMode

Determina si l'aplicació s'obre en mode de reproducció o en mode d'edició.

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

ModelDrivenAppPage

Retornat per AppProvider.getModelDrivenAppPage(). Proporciona accés a la navegació i als components.

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

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

GridComponent

Embolica la graella AG utilitzada en les vistes de llista dirigides per models. Accedit a través ModelDrivenAppPage.gridde .

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

Opcions per identificar quin registre obrir des de la graella.

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

Embolica el format d'execució de Dynamics 365. Accedit a través ModelDrivenAppPage.formde .

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()

Executa codi arbitrari en el context del formulari del navegador amb accés complet a l'API del client Xrm:

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

Consulta proves d'API a través del context del formulari per a un ús detallat.


CommandingComponent

Embolica la barra d'ordres de l'aplicació basada en models. Accedit a través ModelDrivenAppPage.commandingde .

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

CanvasAppPage

Retornat per AppProvider.getCanvasAppPage(). Proporciona el localitzador de fotogrames iframe de tela.

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

GenUxPage

Retornat per AppProvider.getGenUxPage(). Proporciona interaccions amb el dissenyador d'IA GenUX del Power Apps Maker Portal per crear, generar, inspeccionar i publicar aplicacions basades en models a partir de suggeriments d'IA.

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

Exposa el FrameLocator per a l'iframe de la previsualització UCI. Utilitza aquesta propietat per consultar directament els elements de formulari generats:

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

GenUxPage.verifyThoughtStreaming()

Comprova indicadors transitoris de transmissió GenUX, com ara text de pensament, botó d'aturada i pensaments de l'agent. Cada comprovació és de millor esforç: la generació pot completar-se abans que apareguin tots els indicadors. L'única afirmació contundent és que o bé la transmissió està en curs o "Your page is now generated" és visible.

GenUxPage.searchAndPlayApp()

Retorna null quan Play està desactivat (l'app encara no està publicada) en lloc de mostrar un error. Ús test.skip() en una null declaració:

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

Funcions d'utilitat

Funcions d'ajuda independents per a tasques comunes de configuració i configuració.

buildCanvasAppUrlFromEnv

Lectures CANVAS_APP_URL de l'entorn:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Retorna la ruta al fitxer d'estat d'emmagatzematge Power Apps per al correu electrònic donat:

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

ConfigHelper

Proporciona ajudes de configuració, com ara comprovar si l'estat d'emmagatzematge emmagatzemat en memòria cau ha caducat.

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

Utilitats localitzadores

Mètodes d'ajuda per localitzar controls de Power Apps dins dels iframes.

LocatorUtils

Mètodes estàtics per trobar controls d'aplicacions de canvas i elements de galeria per nom.

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

Exportacions de tipus

Exporta tots els tipus des de l'arrel del paquet:

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

Passos següents

Consulteu també