Нотатка
Доступ до цієї сторінки потребує авторизації. Можна спробувати ввійти або змінити каталоги.
Доступ до цієї сторінки потребує авторизації. Можна спробувати змінити каталоги.
Цей набір інструментів Power Platform Playwright API посилається на документи загальнодоступних класів, методів і типів, за допомогою яких можна автоматизувати наскнизне тестування програм із полотном і моделю.
AppProvider
Точка входу для запуску програм Power Platform. З'ясуйте один раз на тест, а потім зателефонуйте 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()
Запускає довільний код у контексті форми браузера з повним доступом до API клієнта Xrm:
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 frame locator.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Повернуто .AppProvider.getGenUxPage() Забезпечує взаємодію з конструктором штучного інтелекта Power Apps Maker Portal GenUX для створення, створення, перевірки та публікації програм на основі моделі з запитів на використання штучного інтелекта.
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
FrameLocator Відображення iframe для попереднього перегляду UCI. Ця властивість використовується для безпосереднього запиту створених елементів форми:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Перевіряє на наявність тимчасових індикаторів потокового передавання GenUX, таких як текст думки, кнопка "Зупинити" та "Думки агента". Кожна перевірка має найкращі зусилля – створення може завершитися, перш ніж з'являться всі індикатори. Єдине тверджене твердження полягає в тому, що потокове передавання виконується або "Your page is now generated" відображається.
GenUxPage.searchAndPlayApp()
Повертається null , якщо відтворення вимкнуто (програма ще не опублікована), а не кидає помилку. Використання test.skip() під час null повернення:
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 }
}
Утиліти для локатора
Допоміжні методи пошуку елементів керування Power Apps в елементах керування iframes.
LocatorUtils
Статичні методи пошуку елементів керування програмою canvas та колекції за іменем.
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';