Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu Power Platform Playwright araç seti API'sinde tuval ve model temelli uygulamaların uçtan uca testini otomatikleştirmek için kullanabileceğiniz genel sınıflar, yöntemler ve türler belgelenmiştir.
AppProvider
Power Platform uygulamalarını başlatmak için giriş noktası. Test başına bir kez örnek oluşturarak çağrısı yapın launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Hangi uygulamanın ve nasıl açılıp açılmayacaklarını yapılandırmak için seçeneğine geçirilen AppProvider.launch() seçenekler.
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
Başlatacak Power Platform uygulamasının türünü belirtir.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Uygulamanın yürütme modunda mı yoksa düzenleme modunda mı açıldığını belirler.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
tarafından AppProvider.getModelDrivenAppPage()döndürülür. Gezinti ve bileşen erişimi sağlar.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Model temelli liste görünümlerinde kullanılan AG Kılavuzunu sarmalar.
ModelDrivenAppPage.grid aracılığıyla erişilir.
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
Kılavuzdan hangi kaydın açıldığına ilişkin seçenekler.
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 form çalışma zamanını sarmalar.
ModelDrivenAppPage.form aracılığıyla erişilir.
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 İstemci API'sine tam erişimle tarayıcının form bağlamında rastgele kod çalıştırır:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Ayrıntılı kullanım için bkz. Form bağlamı aracılığıyla API testi .
CommandingComponent
Model temelli uygulama komut çubuğunu sarmalar.
ModelDrivenAppPage.commanding aracılığıyla erişilir.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
tarafından AppProvider.getCanvasAppPage()döndürülür. Tuval iframe çerçeve bulucuyu sağlar.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
tarafından AppProvider.getGenUxPage()döndürülür. Yapay zeka istemlerinden model temelli uygulamalar oluşturmak, oluşturmak, incelemek ve yayımlamak için Power Apps Oluşturucu Portalı GenUX AI tasarımcısıyla etkileşimler sağlar.
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 için öğesini FrameLocator kullanıma sunar. Oluşturulan form öğelerini doğrudan sorgulamak için bu özelliği kullanın:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Düşünce metni, Durdur düğmesi ve Aracı Düşünceleri gibi geçici GenUX akış göstergelerini denetler. Her denetim en iyi çabadır; tüm göstergeler görünmeden önce oluşturma tamamlanabilir. Tek kesin onay, akışın devam ediyor veya "Your page is now generated" görünür olmasıdır.
GenUxPage.searchAndPlayApp()
Play devre dışı bırakıldığında (uygulama henüz yayımlanmadığında) hata atmak yerine döndürür null . İadede test.skip() kullanınnull:
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Yardımcı program işlevleri
Yaygın kurulum ve yapılandırma görevleri için tek başına yardımcı işlevler.
buildCanvasAppUrlFromEnv
CANVAS_APP_URL Ortamdan okur:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Verilen e-posta için Power Apps depolama durumu dosyasının yolunu döndürür:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Önbelleğe alınmış depolama durumunun süresinin dolup dolmadığını denetleme gibi yapılandırma yardımcıları sağlar.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Bulucu yardımcı programları
iframe'ler içinde Power Apps denetimleri bulmak için yardımcı yöntemler.
LocatorUtils
Tuval uygulaması denetimlerini ve galeri öğelerini ada göre bulmak için statik yöntemler.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Tür dışarı aktarmaları
Paket kökünden tüm türleri dışarı aktarın:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';