Referencia de las API

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';

Pasos siguientes

Consulte también