API сілтемесі

Бұл Power Platform Playwright құралдар жиынтығы API анықтамасында canvas және модельге негізделген қосымшаларды толық тестілеу үшін қолдануға болатын көпшілікке арналған класстар, әдістер мен типтер құжатталады.

AppProvider

Power Platform қосымшаларын іске қосу үшін кіру нүктесі. Әр тестте бір рет іске қосып, содан кейін қоңырау launch()шалыңыз.

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

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

AppLaunchOptions

Опциялар қай қосымшаны және қалай ашу керектігін баптауға берілді AppProvider.launch() .

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

Power Platform қосымшасының түрін көрсетеді.

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

AppLaunchMode

Қосымшаның ойнату режимінде немесе өңдеу режимінде ашылуын анықтайды.

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

ModelDrivenAppPage

Қайтарылған AppProvider.getModelDrivenAppPage(). Навигация және компоненттерге қолжетімділікті қамтамасыз етеді.

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

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

GridComponent

Модельге негізделген тізім көріністерінде қолданылатын AG Grid-ті орайды. Қол 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

Тордан қай жазбаны ашу керектігін анықтауға арналған опциялар.

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 формасын орайды. Қол 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()

Браузердің форма контекстінде кез келген кодты Xrm Client API-ға толық қолжетімділік арқылы іске қосады:

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

Толығырақ пайдалану үшін форма контексті арқылы API тестілеуін қараңыз.


CommandingComponent

Модельге негізделген қосымша командалық жолағын орайды. Қол ModelDrivenAppPage.commandingжеткізілді .

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

CanvasAppPage

Қайтарылған AppProvider.getCanvasAppPage(). Canvas iframe кадр локаторын ұсынады.

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

GenUxPage

Қайтарылған AppProvider.getGenUxPage(). Power Apps Maker Portal GenUX AI дизайнерімен 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

UCI Preview iframe үшін көрсетіледі FrameLocator . Бұл қасиетті пайдаланып, генерацияланған форма элементтерін тікелей сұраңыз:

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

GenUxPage.verifyThoughtStreaming()

GenUX ағынының уақытша көрсеткіштерін, мысалы, ой мәтіні, Stop батырмасы және Agent Thoughts сияқты тексереді. Әр тексеру ең жақсы күш — генерация барлық көрсеткіштер пайда болмай тұрып аяқталуы мүмкін. Жалғыз нақты мәлімдеме — стриминг жүріп жатыр немесе "Your page is now generated" көрініп тұр.

GenUxPage.searchAndPlayApp()

Play өшірілген кезде (қосымша әлі жарияланбаған) қате жібермей, қайтарады null . Қайтару кезінде test.skip() қолдануnull:

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

Пайдалылық функциялары

Орнату және конфигурациялау тапсырмаларына арналған жеке көмекші функциялар.

buildCanvasAppUrlFromEnv

Қоршаған ортадан оқылғандар CANVAS_APP_URL :

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Берілген электрондық пошта үшін Power Apps сақтау күйі файлына жолды қайтарады:

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

ConfigHelper

Кэштелген сақтау күйінің мерзімі аяқталғанын тексеру сияқты конфигурациялық көмекшілер ұсынады.

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

Локатор утилиталары

Power Apps басқару элементтерін iframes ішінде орналастыру үшін көмекші әдістер.

LocatorUtils

Canvas қосымша басқару элементтері мен галерея элементтерін атауы бойынша табудың статикалық әдістері.

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

Типтік экспорт

Пакет түбірінен барлық типтерді экспорттаңыз:

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

Келесі қадамдар

Тағы қараңыз