Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Acest kit de instrumente Power Platform Playwright face referire la documente publice, metode și tipuri pe care le puteți utiliza pentru a automatiza testarea de la un capăt la alta a pânzei și a aplicațiilor bazate pe modele.
AppProvider
Punct de intrare pentru lansarea aplicațiilor Power Platform. Instanțiați o dată pe test, apoi apelați launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Opțiuni transmise pentru a AppProvider.launch() configura ce aplicație să deschidă și cum.
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
Specifică tipul de aplicație Power Platform de lansat.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Determină dacă aplicația se deschide în modul de redare sau în modul de editare.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Returnat de AppProvider.getModelDrivenAppPage(). Oferă acces la navigare și componente.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Încadrează grila AG utilizată în vizualizările listă bazate pe modele. Accesat prin 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
Opțiuni pentru identificarea înregistrării care să se deschidă din grilă.
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
Încadrează modulul runtime al formularului Dynamics 365. Accesat prin 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()
Rulează cod arbitrar în contextul de formular al browserului, cu acces complet la API-ul client Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Consultați Testarea API prin intermediul contextului de formular pentru utilizare detaliată.
CommandingComponent
Încadrează bara de comenzi de aplicație bazată pe model. Accesat prin ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Returnat de AppProvider.getCanvasAppPage(). Furnizează locatorul cadru pentru pânză iframe.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Returnat de AppProvider.getGenUxPage(). Oferă interacțiuni cu Power Apps proiectantul Maker Portal GenUX GenUX pentru crearea, generarea, inspectarea și publicarea aplicațiilor bazate pe modele de la solicitări 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
Expune pentru iframe-ul FrameLocator UCI Preview. Utilizați această proprietate pentru a interoga direct elementele de formular generate:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Verifică dacă există indicatori de redare în flux GenUX tranzitorii, cum ar fi text gândit, butonul Oprire și Gânduri agent. Fiecare verificare este cel mai bun efort - generarea se poate finaliza înainte de a apărea toți indicatorii. Singura afirmație dificilă este că redarea în flux este în curs sau "Your page is now generated" este vizibilă.
GenUxPage.searchAndPlayApp()
Returnează null atunci când Este dezactivat Redare (aplicația nu este încă publicată) în loc să genereze o eroare. Se utilizează test.skip() într-o null returnare:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Funcțiile utilitare
Funcții independente de ajutor pentru activitățile uzuale de configurare și configurare.
buildCanvasAppUrlFromEnv
Citește CANVAS_APP_URL din mediu:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Returnează calea către fișierul de stare de stocare Power Apps pentru mesajul de e-mail dat:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Oferă ajutor pentru configurare, cum ar fi verificarea dacă starea de stocare memorată în cache a expirat.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Utilitare locator
Metode de ajutor pentru localizarea controalelor Power Apps în cadrul iframe-uri.
LocatorUtils
Metode statice pentru găsirea controalelor aplicației pânză și a elementelor din galerie după nume.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Exporturi de tipuri
Se exportă toate tipurile din rădăcina pachetului:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';