APIaren erreferentzia

Power Platform Playwright toolkit APIaren erreferentzia honek klase publikoak, metodoak eta motak dokumentatzen ditu, mihiseen eta ereduetan oinarritutako aplikazioen amaierako probak automatizatzeko erabil ditzakezunak.

AppProvider

Power Platform aplikazioak abiarazteko sarrera puntua. Instantiatu behin proba bakoitzeko, eta gero deitu launch().

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

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

AppLaunchOptions

Aukerak pasatu dira AppProvider.launch() zein aplikazio ireki eta nola konfiguratzeko.

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

Abiarazi beharreko Power Platform aplikazio mota zehazten du.

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

AppLaunchMode

Aplikazioa erreproduzitzeko moduan edo editatzeko moduan irekiko den zehazten du.

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

ModelDrivenAppPage

itzuli da AppProvider.getModelDrivenAppPage(). Nabigazioa eta osagaien sarbidea eskaintzen ditu.

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

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

GridComponent

Ereduan oinarritutako zerrenda-ikuspegietan erabilitako AG sareta itzulbiratzen du. Bidez ModelDrivenAppPage.gridsartuta.

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

Saretik ireki beharreko erregistroa zein den identifikatzeko aukerak.

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

Dynamics 365 inprimakiaren exekuzio-denbora itzultzen du. Bidez ModelDrivenAppPage.formsartuta.

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

Kode arbitrarioa exekutatzen du arakatzailearen inprimakiaren testuinguruan, Xrm bezeroaren APIrako sarbide osoarekin:

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

Ikusi API probak inprimakiaren testuinguruan erabilera zehatza lortzeko.


CommandingComponent

Ereduan oinarritutako aplikazioaren komando-barra itzulbiratzen du. Bidez ModelDrivenAppPage.commandingsartuta.

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

CanvasAppPage

itzuli da AppProvider.getCanvasAppPage(). Mihisearen iframe fotogramen lokalizatzailea eskaintzen du.

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

GenUxPage

itzuli da AppProvider.getGenUxPage(). Power Apps Maker Portal GenUX AI diseinatzailearekin elkarrekintzak eskaintzen ditu AI gonbidapenetatik ereduetan oinarritutako aplikazioak sortzeko, sortzeko, ikuskatzeko eta argitaratzeko.

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

UCIren aurrebistaren FrameLocator iframea bistaratzen du. Erabili propietate hau sortutako inprimaki-elementuak zuzenean kontsultatzeko:

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

GenUxPage.verifyThoughtStreaming()

GenUX streaming adierazle iragankorrak egiaztatzen ditu, hala nola pentsamendu-testua, Gelditu botoia eta Agentearen pentsamenduak. Egiaztapen bakoitza ahalegin onena da - adierazle guztiak agertu aurretik amaituko da. Baieztapen gogor bakarra da streaming-a martxan dagoela edo "Your page is now generated" ikusgai dagoela.

GenUxPage.searchAndPlayApp()

Play desgaituta dagoenean itzultzen null da (aplikazioa oraindik argitaratu gabe), errorea bota beharrean. Erabili test.skip() itzulera batean null :

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

Zerbitzu-funtzioak

Laguntzaile funtzio autonomoak konfigurazio eta konfigurazio zeregin arruntetarako.

buildCanvasAppUrlFromEnv

Ingurunearen irakurketa:CANVAS_APP_URL

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Emandako mezu elektronikoaren Power Apps biltegiratze-egoeraren fitxategiaren bide-izena itzultzen du:

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

ConfigHelper

Konfigurazio-laguntzaileak eskaintzen ditu, hala nola cachean gordetako biltegiratze-egoera iraungita dagoen ala ez egiaztatzea.

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

Lokalizatzailearen utilitateak

Power Apps kontrolak iframe-etan kokatzeko metodo laguntzaileak.

LocatorUtils

Oihalezko aplikazioen kontrolak eta galeriako elementuak izenaren arabera aurkitzeko metodo estatikoak.

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

Esportazio motak

Esportatu mota guztiak paketearen errotik:

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

Hurrengo urratsak

Ikusi ere bai