この Power Platform Playwright ツールキット API リファレンスでは、キャンバスおよびモデル駆動型アプリのエンド ツー エンドテストを自動化するために使用できるパブリック クラス、メソッド、および型について説明します。
AppProvider
Power Platform アプリを起動するためのエントリ ポイント。 テストごとに 1 回インスタンス化し、 launch()を呼び出します。
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
AppProvider.launch()に渡されるオプションを使用して、開くアプリとその方法を構成します。
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
起動する Power Platform アプリの種類を指定します。
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
アプリを再生モードまたは編集モードで開くかどうかを決定します。
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
AppProvider.getModelDrivenAppPage()によって返されます。 ナビゲーションとコンポーネントへのアクセスを提供します。
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
モデル駆動型リスト ビューで使用される AG グリッド をラップします。
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
グリッドから開くレコードを識別するためのオプション。
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 フォーム ランタイムをラップします。
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()
Xrm クライアント API へのフル アクセスを使用して、ブラウザーのフォーム コンテキストで任意のコードを実行します。
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
詳細な使用方法については、 フォーム コンテキストを使用した API テスト を参照してください。
CommandingComponent
モデル駆動型アプリのコマンド バーをラップします。
ModelDrivenAppPage.commanding経由でアクセスされます。
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
AppProvider.getCanvasAppPage()によって返されます。 キャンバス iframe フレーム ロケーターを提供します。
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
AppProvider.getGenUxPage()によって返されます。 ai プロンプトからモデル駆動型アプリを作成、生成、検査、および発行するための、Power Apps Maker Portal GenUX AI デザイナーとの対話を提供します。
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 プレビュー iframe の FrameLocator を公開します。 生成されたフォーム要素に直接クエリを実行するには、次のプロパティを使用します。
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
思考テキスト、停止ボタン、エージェントの考えなど、一時的な GenUX ストリーミング インジケーターを確認します。 各チェックはベスト エフォートです。生成は、すべてのインジケーターが表示される前に完了する可能性があります。 唯一のハード アサーションは、ストリーミングが進行中か、 "Your page is now generated" が表示されていることです。
GenUxPage.searchAndPlayApp()
エラーをスローするのではなく、Play が無効になっている (アプリがまだ公開されていない) 場合に null を返します。
nullリターンでtest.skip()を使用します。
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
ユーティリティ関数
一般的なセットアップおよび構成タスク用のスタンドアロン ヘルパー関数。
buildCanvasAppUrlFromEnv
環境から CANVAS_APP_URL を読み取ります。
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
指定された電子メールの Power Apps ストレージ状態ファイルへのパスを返します。
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
キャッシュされたストレージの状態の有効期限が切れたかどうかを確認するなど、構成ヘルパーを提供します。
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
ロケーター ユーティリティ
iframe 内Power Appsコントロールを検索するためのヘルパー メソッド。
LocatorUtils
名前でキャンバス アプリ コントロールとギャラリー項目を検索するための静的メソッド。
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
型のエクスポート
パッケージ ルートからすべての型をエクスポートします。
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';