Tham chiếu API

API bộ công cụ Power Platform Playwright này tham khảo các lớp học, phương pháp và loại công khai mà bạn có thể sử dụng để tự động hóa việc kiểm tra toàn diện bảng tùy biến và các ứng dụng dựa trên mô hình.

AppProvider

Điểm vào để khởi chạy ứng dụng Power Platform. Tạo phiên bản một lần cho mỗi lần kiểm tra, sau đó gọi launch().

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

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

AppLaunchOptions

Các tùy chọn được chuyển đến AppProvider.launch() để đặt cấu hình ứng dụng cần mở và cách thức mở.

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

Chỉ định loại ứng dụng Power Platform để khởi chạy.

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

AppLaunchMode

Xác định xem ứng dụng có mở trong chế độ phát hoặc chế độ chỉnh sửa hay không.

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

ModelDrivenAppPage

Được trả về bởi AppProvider.getModelDrivenAppPage(). Cung cấp dẫn hướng và truy nhập cấu phần.

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

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

GridComponent

Ngắt dòng Lưới AG được sử dụng trong các dạng xem danh sách dựa trên mô hình. Truy cập qua 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

Các tùy chọn để xác định bản ghi cần mở từ lướ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

Ngắt dòng thời gian Dynamics 365 biểu mẫu. Truy cập qua 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()

Chạy mã tùy ý trong ngữ cảnh biểu mẫu của trình duyệt với quyền truy nhập đầy đủ vào API Máy khách Xrm:

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

Xem thử nghiệm API thông qua ngữ cảnh biểu mẫu để biết mức sử dụng chi tiết.


CommandingComponent

Ngắt dòng thanh lệnh ứng dụng dựa trên mô hình. Truy cập qua ModelDrivenAppPage.commanding.

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

CanvasAppPage

Được trả về bởi AppProvider.getCanvasAppPage(). Cung cấp công cụ định vị khung khung iframe cho bức vẽ.

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

GenUxPage

Được trả về bởi AppProvider.getGenUxPage(). Cung cấp các tương tác với Power Apps Maker Portal GenUX AI designer để tạo, tạo, kiểm tra và phát hành các ứng dụng dựa trên mô hình từ lời nhắc 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

Hiển thị đối FrameLocator với UCI Preview iframe. Sử dụng thuộc tính này để truy vấn trực tiếp các thành phần biểu mẫu đã tạo:

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

GenUxPage.verifyThoughtStreaming()

Kiểm tra các chỉ báo phát trực tuyến GenUX thoáng qua, chẳng hạn như văn bản suy nghĩ, nút Dừng và Suy nghĩ tác nhân. Mỗi kiểm tra là nỗ lực tốt nhất - thế hệ có thể hoàn thành trước khi tất cả các chỉ số xuất hiện. Xác nhận khó khăn duy nhất là phát trực tuyến đang tiến hành hoặc hiển "Your page is now generated" thị.

GenUxPage.searchAndPlayApp()

Trả null về khi phát bị vô hiệu hóa (ứng dụng chưa được phát hành) thay vì trả về lỗi. Sử dụng test.skip() khi trả null lại hàng:

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

Chức năng tiện ích

Chức năng trợ giúp độc lập cho các tác vụ cấu hình và thiết lập phổ biến.

buildCanvasAppUrlFromEnv

Đọc từ CANVAS_APP_URL môi trường:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Trả về đường dẫn đến tệp trạng thái lưu trữ Power Apps cho email đã cho:

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

ConfigHelper

Cung cấp người trợ giúp cấu hình, chẳng hạn như kiểm tra xem trạng thái lưu trữ trong bộ đệm ẩn đã hết hạn hay chưa.

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

Tiện ích bộ định vị

Các phương pháp trợ giúp để xác Power Apps khiển trong iframe.

LocatorUtils

Phương pháp tĩnh để tìm các điều khiển ứng dụng bảng tùy biến và các mục bộ sưu tập theo tên.

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

Loại xuất

Xuất tất cả các loại từ gốc gói:

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

Các bước tiếp theo

Xem thêm