Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Aquesta API de referència Power Platform Playwright documenta classes, mètodes i tipus públics que pots utilitzar per automatitzar proves de cap a fi d'aplicacions canvas i basades en models.
AppProvider
Punt d'entrada per llançar aplicacions de Power Platform. Instancia una vegada per prova i després truca launch()a .
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Em van passar opcions per AppProvider.launch() configurar quina aplicació obrir i com.
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
Especifica quin tipus d'aplicació Power Platform s'ha de llançar.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Determina si l'aplicació s'obre en mode de reproducció o en mode d'edició.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Retornat per AppProvider.getModelDrivenAppPage(). Proporciona accés a la navegació i als components.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Embolica la graella AG utilitzada en les vistes de llista dirigides per models. Accedit a través ModelDrivenAppPage.gridde .
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
Opcions per identificar quin registre obrir des de la graella.
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
Embolica el format d'execució de Dynamics 365. Accedit a través ModelDrivenAppPage.formde .
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()
Executa codi arbitrari en el context del formulari del navegador amb accés complet a l'API del client Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Consulta proves d'API a través del context del formulari per a un ús detallat.
CommandingComponent
Embolica la barra d'ordres de l'aplicació basada en models. Accedit a través ModelDrivenAppPage.commandingde .
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Retornat per AppProvider.getCanvasAppPage(). Proporciona el localitzador de fotogrames iframe de tela.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Retornat per AppProvider.getGenUxPage(). Proporciona interaccions amb el dissenyador d'IA GenUX del Power Apps Maker Portal per crear, generar, inspeccionar i publicar aplicacions basades en models a partir de suggeriments d'IA.
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
Exposa el FrameLocator per a l'iframe de la previsualització UCI. Utilitza aquesta propietat per consultar directament els elements de formulari generats:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Comprova indicadors transitoris de transmissió GenUX, com ara text de pensament, botó d'aturada i pensaments de l'agent. Cada comprovació és de millor esforç: la generació pot completar-se abans que apareguin tots els indicadors. L'única afirmació contundent és que o bé la transmissió està en curs o "Your page is now generated" és visible.
GenUxPage.searchAndPlayApp()
Retorna null quan Play està desactivat (l'app encara no està publicada) en lloc de mostrar un error. Ús test.skip() en una null declaració:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Funcions d'utilitat
Funcions d'ajuda independents per a tasques comunes de configuració i configuració.
buildCanvasAppUrlFromEnv
Lectures CANVAS_APP_URL de l'entorn:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Retorna la ruta al fitxer d'estat d'emmagatzematge Power Apps per al correu electrònic donat:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Proporciona ajudes de configuració, com ara comprovar si l'estat d'emmagatzematge emmagatzemat en memòria cau ha caducat.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Utilitats localitzadores
Mètodes d'ajuda per localitzar controls de Power Apps dins dels iframes.
LocatorUtils
Mètodes estàtics per trobar controls d'aplicacions de canvas i elements de galeria per nom.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Exportacions de tipus
Exporta tots els tipus des de l'arrel del paquet:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';