Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
API kit alat Power Platform Playwright ini merujuk kepada kelas, kaedah dan jenis awam yang boleh anda gunakan untuk mengautomasikan ujian hujung ke hujung kanvas dan apl dipacu model.
AppProvider
Titik masuk untuk melancarkan apl Power Platform. Sertakan sekali setiap ujian, kemudian panggil launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Pilihan yang dihantar untuk AppProvider.launch() mengkonfigurasi apl mana yang hendak dibuka dan bagaimana.
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
Menentukan jenis aplikasi Power Platform untuk dilancarkan.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Menentukan sama ada apl dibuka dalam mod main atau mod edit.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Dikembalikan oleh AppProvider.getModelDrivenAppPage(). Menyediakan navigasi dan akses komponen.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Membungkus Grid AG yang digunakan dalam pandangan senarai dipacu model. Diakses melalui 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
Pilihan untuk mengenal pasti rekod yang hendak dibuka daripada grid.
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
Membungkus masa jalan borang Dynamics 365. Diakses melalui 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()
Menjalankan kod sewenang-wenangnya dalam konteks borang penyemak imbas dengan akses penuh kepada API Pelanggan Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Lihat ujian API melalui konteks borang untuk penggunaan terperinci.
CommandingComponent
Membungkus bar perintah apl dipacu model. Diakses melalui ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Dikembalikan oleh AppProvider.getCanvasAppPage(). Menyediakan pencari bingkai iframe kanvas.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Dikembalikan oleh AppProvider.getGenUxPage(). Menyediakan interaksi dengan pereka bentuk AI GenUX Power Apps Maker Portal untuk mencipta, menjana, memeriksa dan menerbitkan apl dipacu model daripada gesaan 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
Mendedahkan untuk FrameLocator iframe Pratonton UCI. Gunakan sifat ini untuk menanyakan elemen borang yang dijana secara langsung:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Menyemak penunjuk penstriman GenUX sementara, seperti teks pemikiran, butang Berhenti dan Pemikiran Ejen. Setiap semakan adalah usaha terbaik - penjanaan mungkin selesai sebelum semua penunjuk muncul. Satu-satunya penegasan keras ialah sama ada penstriman sedang berjalan atau "Your page is now generated" kelihatan.
GenUxPage.searchAndPlayApp()
Kembali null apabila Main dinyahdayakan (apl belum diterbitkan) dan bukannya membuang ralat. Gunakan test.skip() semasa pemulangan null :
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Fungsi utiliti
Fungsi pembantu kendiri untuk tugas persediaan dan konfigurasi biasa.
buildCanvasAppUrlFromEnv
Membaca CANVAS_APP_URL daripada persekitaran:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Mengembalikan laluan ke fail keadaan storan Power Apps untuk e-mel yang diberikan:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Menyediakan pembantu konfigurasi, seperti menyemak sama ada keadaan storan cache telah tamat tempoh.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Utiliti pencari
Kaedah pembantu untuk mencari kawalan Power Apps dalam iframe.
LocatorUtils
Kaedah statik untuk mencari kawalan apl kanvas dan item galeri mengikut nama.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Eksport jenis
Eksport semua jenis daripada akar pakej:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';