Sklic API-ja

Ta programski vmesnik API kompleta orodij Playwright za Power Platform se sklicuje na javne razrede, metode in vrste, s katerimi lahko avtomatizirate končno preskušanje platna in aplikacij, ki jih poganja model.

AppProvider

Vstopna točka za zagon aplikacij platforme Power Platform. Ustvarite enkrat na preskus, nato pa pokličite launch().

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

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

AppLaunchOptions

Podane možnosti za AppProvider.launch() konfiguracijo aplikacije, ki jo želite odpreti in 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

Določa vrsto aplikacije Power Platform, ki jo želite zagnati.

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

AppLaunchMode

Določa, ali se aplikacija odpre v načinu predvajanja ali načinu urejanja.

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

ModelDrivenAppPage

Vrnil .AppProvider.getModelDrivenAppPage() Omogoča krmarjenje in dostop do komponent.

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

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

GridComponent

Prelomi mrežo AG, ki se uporablja v pogledih seznama, ki temeljijo na modelu. Dostop prek 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

Možnosti za določanje zapisa, ki ga želite odpreti v mreži.

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

Prelomi Dynamics 365 izvajanje obrazca. Dostop prek 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()

Zažene poljubno kodo v kontekstu obrazca brskalnika s polnim dostopom do API-ja odjemalca Xrm:

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

Za podrobno uporabo glejte Preskušanje API-ja prek konteksta obrazca.


CommandingComponent

Prelomi ukazno vrstico aplikacije, ki temelji na modelu. Dostop prek ModelDrivenAppPage.commanding.

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

CanvasAppPage

Vrnil .AppProvider.getCanvasAppPage() Zagotavlja lokator okvirjev iframe na platnu.

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

GenUxPage

Vrnil .AppProvider.getGenUxPage() Zagotavlja interakcije z oblikovalnikom portala Power Apps GenUX AI za ustvarjanje, ustvarjanje, pregledovanje in objavljanje aplikacij, ki temeljijo na modelu, iz pozivov umetne uporabniške izkušnje.

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

Izpostavi za FrameLocator okvir iframe predogleda UCI. To lastnost uporabite za neposredno poizvedbo po ustvarjenih elementih obrazca:

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

GenUxPage.verifyThoughtStreaming()

Preveri, ali so na voljo prehodni pretočni indikatorji GenUX, kot so miselno besedilo, gumb Ustavi in Misli posrednika. Vsako preverjanje je najboljša izbira – ustvarjanje se lahko dokonča, preden se prikažejo vsi indikatorji. Edina trditev je, da je pretočni prenos v teku ali pa "Your page is now generated" je viden.

GenUxPage.searchAndPlayApp()

Vrne, null ko je funkcija predvajanja onemogočena (aplikacija še ni objavljena), namesto da prikaže napako. Uporabi test.skip() za null vračilo:

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

Pomožne funkcije

Samostojne funkcije za pomoč pri pogostih opravilih nastavitve in konfiguracije.

buildCanvasAppUrlFromEnv

Bere CANVAS_APP_URL iz okolja:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Vrne pot do datoteke stanja shrambe Power Apps za dano e-pošto:

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

ConfigHelper

Nudi pomoč za konfiguracijo, na primer preverjanje, ali je stanje predpomnjenega prostora za shranjevanje poteklo.

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

Pripomočki za iskanje

Načini za pomoč pri iskanju kontrolnikov Power Apps v okvirih »iframe«.

LocatorUtils

Statični načini za iskanje kontrolnikov aplikacije za platno in elementov galerije po imenu.

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

Izvoz vrste

Izvozi vse vrste iz korena paketa:

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

Naslednji koraki

Glejte tudi