Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här API:et för Power Platform Playwright-verktygen refererar till offentliga klasser, metoder och typer som du kan använda för att automatisera testning från slutpunkt till slutpunkt av arbetsytor och modelldrivna appar.
AppProvider
Startpunkt för att starta Power Platform-appar. Instansiera en gång per test och anropa launch()sedan .
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Alternativ som skickas till AppProvider.launch() för att konfigurera vilken app som ska öppnas och hur.
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
Anger vilken typ av Power Platform-app som ska startas.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Avgör om appen öppnas i uppspelningsläge eller redigeringsläge.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Returneras av AppProvider.getModelDrivenAppPage(). Ger navigerings- och komponentåtkomst.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Omsluter ag-rutnätet som används i modelldrivna listvyer. Nå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
Alternativ för att identifiera vilken post som ska öppnas från rutnätet.
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
Omsluter Dynamics 365 formulärkörning. Nå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ör godtycklig kod i webbläsarens formulärkontext med fullständig åtkomst till Xrm-klient-API:et:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Se API-testning via formulärkontext för detaljerad användning.
CommandingComponent
Omsluter kommandofältet för den modelldrivna appen. Nås via ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Returneras av AppProvider.getCanvasAppPage(). Tillhandahåller positioneraren för arbetsytans iframe-ram.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Returneras av AppProvider.getGenUxPage(). Tillhandahåller interaktioner med Power Apps Maker Portal GenUX AI Designer för att skapa, generera, inspektera och publicera modelldrivna appar från AI-prompter.
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
Exponerar FrameLocator för UCI Preview iframe. Använd den här egenskapen om du vill köra frågor mot genererade formulärelement direkt:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Söker efter tillfälliga GenUX-strömningsindikatorer, till exempel tanketext, stoppknapp och agenttankar. Varje kontroll är bäst – genereringen kan slutföras innan alla indikatorer visas. Det enda hårda påståendet är att strömning pågår eller "Your page is now generated" är synligt.
GenUxPage.searchAndPlayApp()
Returnerar null när Uppspelning är inaktiverat (appen har ännu inte publicerats) i stället för att utlösa ett fel. Använd test.skip() vid en null retur:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Verktygsfunktioner
Fristående hjälpfunktioner för vanliga konfigurations- och konfigurationsuppgifter.
buildCanvasAppUrlFromEnv
Läsningar CANVAS_APP_URL från miljön:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Returnerar sökvägen till lagringstillståndsfilen Power Apps för det angivna e-postmeddelandet:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Tillhandahåller konfigurationshjälp, till exempel att kontrollera om det cachelagrade lagringstillståndet har upphört att gälla.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Positionerarverktyg
Hjälpmetoder för att hitta Power Apps kontroller i iframes.
LocatorUtils
Statiska metoder för att hitta appkontroller för arbetsytor och galleriobjekt efter namn.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Typexport
Exportera alla typer från paketroten:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';