Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
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';