Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Този 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
Пренася 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 на платното.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Върнато от AppProvider.getGenUxPage(). Предоставя взаимодействия с Power Apps Maker Portal GenUX AI designer за създаване, генериране, проверка и публикуване на базирани на модел приложения от подкани за ИИ.
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
Показва iframe за FrameLocator предварителния преглед на 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 когато Play е дезактивирано (приложението все още не е публикувано), вместо да дава грешка. Използване 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 }
}
Помощни програми за Locator
Помощни методи за намиране на контроли на 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';