API referansı

Bu Power Platform Playwright araç seti API'sinde tuval ve model temelli uygulamaların uçtan uca testini otomatikleştirmek için kullanabileceğiniz genel sınıflar, yöntemler ve türler belgelenmiştir.

AppProvider

Power Platform uygulamalarını başlatmak için giriş noktası. Test başına bir kez örnek oluşturarak çağrısı yapın launch().

class AppProvider {
  constructor(page: Page, context: BrowserContext)

  launch(options: AppLaunchOptions): Promise<void>
  getModelDrivenAppPage(): ModelDrivenAppPage
  getCanvasAppPage(): CanvasAppPage
  getGenUxPage(): GenUxPage
}

AppLaunchOptions

Hangi uygulamanın ve nasıl açılıp açılmayacaklarını yapılandırmak için seçeneğine geçirilen AppProvider.launch() seçenekler.

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

Başlatacak Power Platform uygulamasının türünü belirtir.

enum AppType {
  Canvas = 'canvas',
  ModelDriven = 'model-driven',
}

AppLaunchMode

Uygulamanın yürütme modunda mı yoksa düzenleme modunda mı açıldığını belirler.

enum AppLaunchMode {
  Play = 'play',
  Edit = 'edit',
}

ModelDrivenAppPage

tarafından AppProvider.getModelDrivenAppPage()döndürülür. Gezinti ve bileşen erişimi sağlar.

class ModelDrivenAppPage {
  readonly grid: GridComponent
  readonly form: FormComponent
  readonly commanding: CommandingComponent

  navigateToGridView(entityLogicalName: string): Promise<void>
  navigateToFormView(entityLogicalName: string): Promise<void>
}

GridComponent

Model temelli liste görünümlerinde kullanılan AG Kılavuzunu sarmalar. ModelDrivenAppPage.grid aracılığıyla erişilir.

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

Kılavuzdan hangi kaydın açıldığına ilişkin seçenekler.

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

Dynamics 365 form çalışma zamanını sarmalar. ModelDrivenAppPage.form aracılığıyla erişilir.

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()

Xrm İstemci API'sine tam erişimle tarayıcının form bağlamında rastgele kod çalıştırır:

const value = await mda.form.execute(
  (ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);

Ayrıntılı kullanım için bkz. Form bağlamı aracılığıyla API testi .


CommandingComponent

Model temelli uygulama komut çubuğunu sarmalar. ModelDrivenAppPage.commanding aracılığıyla erişilir.

class CommandingComponent {
  clickButton(ariaLabel: string): Promise<void>
  clickMoreCommands(): Promise<void>
}

CanvasAppPage

tarafından AppProvider.getCanvasAppPage()döndürülür. Tuval iframe çerçeve bulucuyu sağlar.

class CanvasAppPage {
  getFrame(): FrameLocator
  waitForLoad(controlName?: string): Promise<void>
}

GenUxPage

tarafından AppProvider.getGenUxPage()döndürülür. Yapay zeka istemlerinden model temelli uygulamalar oluşturmak, oluşturmak, incelemek ve yayımlamak için Power Apps Oluşturucu Portalı GenUX AI tasarımcısıyla etkileşimler sağlar.

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

UCI Preview iframe için öğesini FrameLocator kullanıma sunar. Oluşturulan form öğelerini doğrudan sorgulamak için bu özelliği kullanın:

const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();

GenUxPage.verifyThoughtStreaming()

Düşünce metni, Durdur düğmesi ve Aracı Düşünceleri gibi geçici GenUX akış göstergelerini denetler. Her denetim en iyi çabadır; tüm göstergeler görünmeden önce oluşturma tamamlanabilir. Tek kesin onay, akışın devam ediyor veya "Your page is now generated" görünür olmasıdır.

GenUxPage.searchAndPlayApp()

Play devre dışı bırakıldığında (uygulama henüz yayımlanmadığında) hata atmak yerine döndürür null . İadede test.skip() kullanınnull:

const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();

Yardımcı program işlevleri

Yaygın kurulum ve yapılandırma görevleri için tek başına yardımcı işlevler.

buildCanvasAppUrlFromEnv

CANVAS_APP_URL Ortamdan okur:

function buildCanvasAppUrlFromEnv(): string

getStorageStatePath

Verilen e-posta için Power Apps depolama durumu dosyasının yolunu döndürür:

function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json

ConfigHelper

Önbelleğe alınmış depolama durumunun süresinin dolup dolmadığını denetleme gibi yapılandırma yardımcıları sağlar.

class ConfigHelper {
  static checkStorageStateExpiration(
    statePath: string
  ): { expired: boolean; expiresOn?: number }
}

Bulucu yardımcı programları

iframe'ler içinde Power Apps denetimleri bulmak için yardımcı yöntemler.

LocatorUtils

Tuval uygulaması denetimlerini ve galeri öğelerini ada göre bulmak için statik yöntemler.

class LocatorUtils {
  static getByControlName(frame: FrameLocator, controlName: string): Locator
  static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}

Tür dışarı aktarmaları

Paket kökünden tüm türleri dışarı aktarın:

import {
  AppProvider,
  AppType,
  AppLaunchMode,
  AppLaunchOptions,
  ModelDrivenAppPage,
  GridComponent,
  FormComponent,
  CommandingComponent,
  CanvasAppPage,
  GenUxPage,
  buildCanvasAppUrlFromEnv,
  getStorageStatePath,
  ConfigHelper,
  LocatorUtils,
} from 'power-platform-playwright-toolkit';

Sonraki Adımlar

Ayrıca bakınız