Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze Power Platform Playwright toolkit-API verwijst naar openbare klassen, methoden en typen die u kunt gebruiken om end-to-end testen van canvas- en modelgestuurde apps te automatiseren.
AppProvider
Toegangspunt voor het starten van Power Platform-apps. Instantieer eenmaal per test en bel launch()vervolgens.
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Opties die zijn doorgegeven om te AppProvider.launch() configureren welke app moet worden geopend en hoe.
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
Hiermee geeft u het type Power Platform-app op dat moet worden gestart.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Bepaalt of de app wordt geopend in de afspeelmodus of de bewerkingsmodus.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Geretourneerd door AppProvider.getModelDrivenAppPage(). Biedt navigatie- en onderdeeltoegang.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Verpakt het AG-raster dat wordt gebruikt in modelgestuurde lijstweergaven. Toegankelijk 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
Opties voor het identificeren van welke record moet worden geopend vanuit het raster.
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
Verpakt de Dynamics 365 formulierruntime. Toegankelijk 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()
Hiermee wordt willekeurige code uitgevoerd in de formuliercontext van de browser met volledige toegang tot de Xrm-client-API:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Zie API-tests via formuliercontext voor gedetailleerd gebruik.
CommandingComponent
Verpakt de opdrachtbalk van de modelgestuurde app. Toegankelijk via ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Geretourneerd door AppProvider.getCanvasAppPage(). Biedt de canvas iframe frame locator.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Geretourneerd door AppProvider.getGenUxPage(). Biedt interacties met de Power Apps Maker Portal GenUX AI Designer voor het maken, genereren, inspecteren en publiceren van modelgestuurde apps op basis van 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
Hiermee wordt het FrameLocator iframe voor de UCI Preview weergegeven. Gebruik deze eigenschap om rechtstreeks query's uit te voeren op gegenereerde formulierelementen:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Controleert op tijdelijke GenUX-streaming-indicatoren, zoals gedachtetekst, knop Stoppen en Gedachten van agent. Elke controle is best-effort. Het genereren kan worden voltooid voordat alle indicatoren worden weergegeven. De enige harde bewering is dat streaming wordt uitgevoerd of "Your page is now generated" zichtbaar is.
GenUxPage.searchAndPlayApp()
Retourneert null wanneer Play is uitgeschakeld (app is nog niet gepubliceerd) in plaats van een fout te genereren. Gebruiken test.skip() op een null retour:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Hulpprogrammafuncties
Zelfstandige helperfuncties voor algemene installatie- en configuratietaken.
buildCanvasAppUrlFromEnv
Leesbewerkingen CANVAS_APP_URL uit de omgeving:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Retourneert het pad naar het Power Apps opslagstatusbestand voor de opgegeven e-mail:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Biedt configuratiehulpfuncties, zoals controleren of de opslagstatus in de cache is verlopen.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Locatorhulpprogramma's
Helpermethoden voor het vinden van Power Apps besturingselementen binnen iframes.
LocatorUtils
Statische methoden voor het vinden van besturingselementen voor canvas-apps en galerie-items op naam.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Type exports
Alle typen exporteren vanuit de hoofdmap van het pakket:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';