Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten interfejs API zestawu narzędzi Playwright platformy Power Platform odwołuje się do dokumentów publicznych klas, metod i typów, których można użyć do automatyzowania kompleksowego testowania aplikacji kanwy i aplikacji opartych na modelu.
AppProvider
Punkt wejścia do uruchamiania aplikacji platformy Power Platform. Utwórz wystąpienie raz na test, a następnie wywołaj metodę launch().
class AppProvider {
constructor(page: Page, context: BrowserContext)
launch(options: AppLaunchOptions): Promise<void>
getModelDrivenAppPage(): ModelDrivenAppPage
getCanvasAppPage(): CanvasAppPage
getGenUxPage(): GenUxPage
}
AppLaunchOptions
Opcje przekazane w celu AppProvider.launch() skonfigurowania, która aplikacja ma być otwarta i jak.
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
Określa typ aplikacji Power Platform do uruchomienia.
enum AppType {
Canvas = 'canvas',
ModelDriven = 'model-driven',
}
AppLaunchMode
Określa, czy aplikacja zostanie otwarta w trybie odtwarzania, czy w trybie edycji.
enum AppLaunchMode {
Play = 'play',
Edit = 'edit',
}
ModelDrivenAppPage
Zwrócone przez .AppProvider.getModelDrivenAppPage() Zapewnia dostęp do nawigacji i składników.
class ModelDrivenAppPage {
readonly grid: GridComponent
readonly form: FormComponent
readonly commanding: CommandingComponent
navigateToGridView(entityLogicalName: string): Promise<void>
navigateToFormView(entityLogicalName: string): Promise<void>
}
GridComponent
Opakowuje siatkę grupy dostępności używaną w widokach listy opartej na modelu. Dostęp jest uzyskiwany za pośrednictwem 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
Opcje identyfikowania rekordu do otwarcia z siatki.
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
Opakowuje środowisko uruchomieniowe formularza Dynamics 365. Dostęp jest uzyskiwany za pośrednictwem 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()
Uruchamia dowolny kod w kontekście formularza przeglądarki z pełnym dostępem do interfejsu API klienta Xrm:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
Zobacz Testowanie interfejsu API za pomocą kontekstu formularza , aby uzyskać szczegółowe informacje o użyciu.
CommandingComponent
Opakowuje pasek poleceń aplikacji opartej na modelu. Dostęp jest uzyskiwany za pośrednictwem ModelDrivenAppPage.commanding.
class CommandingComponent {
clickButton(ariaLabel: string): Promise<void>
clickMoreCommands(): Promise<void>
}
CanvasAppPage
Zwrócone przez .AppProvider.getCanvasAppPage() Udostępnia lokalizator ramek kanwy iframe.
class CanvasAppPage {
getFrame(): FrameLocator
waitForLoad(controlName?: string): Promise<void>
}
GenUxPage
Zwrócone przez .AppProvider.getGenUxPage() Zapewnia interakcje z projektantem sztucznej inteligencji usługi GenUX portalu usługi Power Apps Maker na potrzeby tworzenia, generowania, inspekcji i publikowania aplikacji opartych na modelu z poziomu monitów sztucznej inteligencji.
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
Uwidacznia element FrameLocator dla elementu iframe w wersji zapoznawczej UCI. Użyj tej właściwości, aby bezpośrednio wykonywać zapytania dotyczące wygenerowanych elementów formularza:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
Sprawdza przejściowe wskaźniki przesyłania strumieniowego genUX, takie jak tekst myślowy, przycisk Zatrzymaj i Myśli agenta. Każde sprawdzenie jest najlepszym wysiłkiem — generowanie może zostać ukończone przed wyświetleniem wszystkich wskaźników. Jedyną twardą asercją jest to, że przesyłanie strumieniowe jest w toku lub "Your page is now generated" jest widoczne.
GenUxPage.searchAndPlayApp()
Zwraca wartość null , gdy odtwórz jest wyłączony (aplikacja nie została jeszcze opublikowana), a nie zgłasza błąd. Użyj test.skip() po powrocie null :
const appPage = await genUxPage.searchAndPlayApp(appName, context);
if (!appPage) test.skip();
Funkcje użytkowe
Autonomiczne funkcje pomocnicze dla typowych zadań konfiguracji i konfiguracji.
buildCanvasAppUrlFromEnv
Odczyty CANVAS_APP_URL ze środowiska:
function buildCanvasAppUrlFromEnv(): string
getStorageStatePath
Zwraca ścieżkę do pliku stanu magazynu Power Apps dla danej wiadomości e-mail:
function getStorageStatePath(email: string): string
// Returns: packages/e2e-tests/.playwright-ms-auth/state-<email>.json
ConfigHelper
Udostępnia pomocników konfiguracji, takich jak sprawdzanie, czy stan magazynu w pamięci podręcznej wygasł.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Narzędzia lokalizatora
Metody pomocnicze do lokalizowania kontrolek Power Apps w elementach iframe.
LocatorUtils
Statyczne metody znajdowania kontrolek aplikacji kanwy i elementów galerii według nazwy.
class LocatorUtils {
static getByControlName(frame: FrameLocator, controlName: string): Locator
static getGalleryItem(frame: FrameLocator, titleText: string): Locator
}
Eksporty typów
Eksportuj wszystkie typy z katalogu głównego pakietu:
import {
AppProvider,
AppType,
AppLaunchMode,
AppLaunchOptions,
ModelDrivenAppPage,
GridComponent,
FormComponent,
CommandingComponent,
CanvasAppPage,
GenUxPage,
buildCanvasAppUrlFromEnv,
getStorageStatePath,
ConfigHelper,
LocatorUtils,
} from 'power-platform-playwright-toolkit';