Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Denne Power Platform Playwright toolkit API refererer til offentlige klasser, metoder og typer, som du kan bruge til at automatisere komplette test af lærredsapps og modeldrevne apps.
AppProvider
Indgangspunkt til start af Power Platform-apps. Instantier én gang pr. test, og kald launch()derefter .
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Indstillinger, der overføres til AppProvider.launch() for at konfigurere, hvilken app der skal åbnes, og hvordan.
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
Angiver den type Power Platform-app, der skal startes.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Bestemmer, om appen åbnes i afspilningstilstand eller redigeringstilstand.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Returneret af AppProvider.getModelDrivenAppPage(). Giver adgang til navigation og komponenter.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Ombryder det AG-gitter, der bruges i modeldrevne listevisninger. Tilgås via 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
Indstillinger til identifikation af, hvilken post der skal åbnes fra gitteret.
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
Ombryder kørselstiden for Dynamics 365 formular. Tilgås via 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()
Kører vilkårlig kode i browserens formularkontekst med fuld adgang til Xrm-klient-API'en:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Se API-test via formularkontekst for at få mere at vide om brug.
CommandingComponent
Ombryder kommandolinjen for den modeldrevne app. Tilgås via ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Returneret af AppProvider.getCanvasAppPage(). Leverer lærredets iframe-rammelokator.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Returneret af AppProvider.getGenUxPage(). Leverer interaktioner med Power Apps Maker Portal GenUX AI-designer til oprettelse, generering, undersøgelse og publicering af modeldrevne apps fra AI-prompts.
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 Viser for UCI Preview-iframe. Brug denne egenskab til at forespørge om genererede formularelementer direkte:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Kontrollerer, om der er midlertidige GenUX-streamingindikatorer, f.eks. tanketekst, stopknap og Agent tanker. Hver kontrol er den bedste indsats – generering kan fuldføres, før alle indikatorer vises. Den eneste hårde antagelse er, at enten streaming er i gang eller "Your page is now generated" er synlig.
GenUxPage.searchAndPlayApp()
Returnerer null , når Afspil er deaktiveret (appen er endnu ikke publiceret) i stedet for at udløse en fejl. Bruges test.skip() ved returnering null :
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Hjælpefunktioner
Separate hjælpefunktioner til almindelige konfigurationsopgaver.
buildCanvasAppUrlFromEnv
CANVAS_APP_URL Læser fra miljøet:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Returnerer stien til Power Apps lagertilstandsfilen for den angivne mail:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Leverer konfigurationshjælpeenheder, f.eks. kontrol af, om den cachelagrede lagertilstand er udløbet.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Hjælpeprogrammer til lokalisering
Hjælpemetoder til at finde Power Apps kontrolelementer inden for iframes.
LocatorUtils
Statiske metoder til at finde kontrolelementer til lærredsapps og gallerielementer efter navn.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Typeeksport
Eksportér alle typer fra pakkeroden:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';