Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta API del kit de herramientas de Power Platform Playwright documenta clases públicas, métodos y tipos que puede usar para automatizar las pruebas de un extremo a otro del lienzo y las aplicaciones controladas por modelos.
AppProvider
Punto de entrada para iniciar aplicaciones de Power Platform. Cree una instancia una vez por prueba y, a continuación, llame a launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Opciones pasadas a AppProvider.launch() para configurar qué aplicación se va a abrir y cómo.
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 el tipo de aplicación de Power Platform que se va a iniciar.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Determina si la aplicación se abre en modo de reproducción o en modo de edición.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Devuelto por AppProvider.getModelDrivenAppPage(). Proporciona acceso a componentes y navegación.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Ajusta la cuadrícula de ag usada en las vistas de lista controladas por modelos. Acceso a través de 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
Opciones para identificar qué registro se va a abrir desde la cuadrícula.
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
Ajusta el tiempo de ejecución del formulario de Dynamics 365. Acceso a través de 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()
Ejecuta código arbitrario en el contexto de formulario del explorador con acceso completo a la API de cliente Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Consulte Pruebas de API a través del contexto del formulario para obtener un uso detallado.
CommandingComponent
Ajusta la barra de comandos de la aplicación controlada por modelos. Acceso a través de ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Devuelto por AppProvider.getCanvasAppPage(). Proporciona el localizador de fotogramas iframe de lienzo.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Devuelto por AppProvider.getGenUxPage(). Proporciona interacciones con el diseñador de inteligencia artificial de GenUX del portal de Power Apps Maker para crear, generar, inspeccionar y publicar aplicaciones controladas por modelos a partir de mensajes de inteligencia artificial.
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
Expone para FrameLocator el iframe de la versión preliminar de UCI. Use esta propiedad para consultar directamente los elementos de formulario generados:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Comprueba si hay indicadores transitorios de streaming de GenUX, como texto pensado, botón Detener y Pensamientos del agente. Cada comprobación es el mejor esfuerzo: la generación puede completarse antes de que aparezcan todos los indicadores. La única aserción dura es que el streaming está en curso o "Your page is now generated" está visible.
GenUxPage.searchAndPlayApp()
Devuelve null cuando Play está deshabilitado (la aplicación aún no está publicada) en lugar de producir un error. Use test.skip() en una null devolución:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Funciones de utilidad
Funciones auxiliares independientes para tareas comunes de configuración y configuración.
buildCanvasAppUrlFromEnv
CANVAS_APP_URL Lee del entorno:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Devuelve la ruta de acceso al archivo de estado de almacenamiento Power Apps para el correo electrónico especificado:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Proporciona asistentes de configuración, como comprobar si el estado de almacenamiento almacenado en caché ha expirado.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Utilidades de localizador
Métodos auxiliares para buscar controles Power Apps dentro de iframes.
LocatorUtils
Métodos estáticos para buscar controles de aplicación de lienzo y elementos de galería por nombre.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Exportaciones de tipos
Exporte todos los tipos desde la raíz del paquete:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';