Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Бұл Power Platform Playwright құралдар жиынтығы API анықтамасында canvas және модельге негізделген қосымшаларды толық тестілеу үшін қолдануға болатын көпшілікке арналған класстар, әдістер мен типтер құжатталады.
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 Grid-ті орайды. Қол 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 Client 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(). Canvas iframe кадр локаторын ұсынады.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Қайтарылған AppProvider.getGenUxPage(). Power Apps Maker Portal GenUX AI дизайнерімен 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 Preview iframe үшін көрсетіледі FrameLocator . Бұл қасиетті пайдаланып, генерацияланған форма элементтерін тікелей сұраңыз:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
GenUX ағынының уақытша көрсеткіштерін, мысалы, ой мәтіні, Stop батырмасы және Agent Thoughts сияқты тексереді. Әр тексеру ең жақсы күш — генерация барлық көрсеткіштер пайда болмай тұрып аяқталуы мүмкін. Жалғыз нақты мәлімдеме — стриминг жүріп жатыр немесе "Your page is now generated" көрініп тұр.
GenUxPage.searchAndPlayApp()
Play өшірілген кезде (қосымша әлі жарияланбаған) қате жібермей, қайтарады 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';