หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ชุดเครื่องมือ Power Platform Playwright นี้ API อ้างอิงเอกสารระดับชั้นสาธารณะ วิธีการ และประเภทที่คุณสามารถใช้เพื่อทําให้การทดสอบแบบ end-to-end เป็นอัตโนมัติสําหรับพื้นที่ทํางานและแอปที่ขับเคลื่อนด้วยแบบจําลอง
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 ที่ใช้ในมุมมองรายการแบบจําลองข้อมูล เข้าถึงผ่านทาง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() ให้ตัวระบุเฟรม 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
แสดง FrameLocator สําหรับ iframe การแสดงตัวอย่าง UCI ใช้คุณสมบัตินี้เพื่อคิวรีองค์ประกอบของฟอร์มที่สร้างขึ้นโดยตรง:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
ตรวจสอบตัวบ่งชี้การสตรีม GenUX ชั่วคราว เช่น ข้อความคิด ปุ่มหยุด และความคิดตัวแทน การตรวจสอบแต่ละครั้งคือความพยายามอย่างดีที่สุด - การสร้างอาจเสร็จสมบูรณ์ก่อนที่ตัวบ่งชี้ทั้งหมดจะปรากฏขึ้น การยืนยันอย่างเดียวคือการสตรีมอยู่ในระหว่างดําเนินการหรือ "Your page is now generated" มองเห็นได้
GenUxPage.searchAndPlayApp()
ส่งกลับ null เมื่อปิดใช้งาน Play (ยังไม่ได้เผยแพร่แอป) แทนที่จะแสดงข้อผิดพลาด ใช้ 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
วิธีการแบบคงที่สําหรับการค้นหาตัวควบคุมแอปพื้นที่ทํางานและรายการแกลเลอรีตามชื่อ
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';