Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот API набора средств Power Platform Playwright ссылается на общедоступные классы, методы и типы, которые можно использовать для автоматизации сквозного тестирования приложений на основе холста и моделей.
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
Упаковывает сетку группы доступности , используемую в представлениях списка на основе модели. Доступ к ней осуществляется через 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(). Предоставляет указатель фреймов на холсте.
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
Статические методы для поиска элементов управления приложения холстом и элементов коллекции по имени.
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';