API 참조

이 Power Platform Playwright 도구 키트 API 참조는 캔버스 및 모델 기반 앱의 엔드투엔드 테스트를 자동화하는 데 사용할 수 있는 공용 클래스, 메서드 및 형식을 문서화합니다.

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 클라이언트 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(). 캔버스 iframe 프레임 로케이터를 제공합니다.

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

GenUxPage

에서 반환됩니다 AppProvider.getGenUxPage(). ai 프롬프트에서 모델 기반 앱을 만들고, 생성하고, 검사하고, 게시하기 위한 Power Apps Maker 포털 GenUX 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

FrameLocator UCI 미리 보기 iframe용을 노출합니다. 생성된 양식 요소를 직접 쿼리하려면 이 속성을 사용합니다.

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

GenUxPage.verifyThoughtStreaming()

생각 텍스트, 중지 단추 및 에이전트 생각과 같은 일시적인 GenUX 스트리밍 표시기를 확인합니다. 각 검사는 최선의 작업입니다. 모든 지표가 나타나기 전에 생성이 완료될 수 있습니다. 유일한 하드 어설션은 스트리밍이 진행 중이거나 "Your page is now generated" 표시되는 것입니다.

GenUxPage.searchAndPlayApp()

오류를 throw하는 대신 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 }
}

로케이터 유틸리티

iframe 내에서 Power Apps 컨트롤을 찾기 위한 도우미 메서드입니다.

LocatorUtils

이름별로 캔버스 앱 컨트롤 및 갤러리 항목을 찾기 위한 정적 메서드입니다.

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';

다음 단계

참고하십시오