Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Αυτό το κιτ εργαλείων API Playwright του Power Platform αναφέρει έγγραφα δημόσιων κλάσεων, μεθόδων και τύπων που μπορείτε να χρησιμοποιήσετε για να αυτοματοποιήσετε, από άκρο σε άκρο, τις δοκιμές καμβά και τις εφαρμογές βάσει μοντέλου.
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(). Παρέχει αλληλεπιδράσεις με το εργαλείο σχεδίασης AI του Power Apps Maker Portal GenUX για τη δημιουργία, τη δημιουργία, τον έλεγχο και τη δημοσίευση εφαρμογών βάσει μοντέλου από προτροπές 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
Εμφανίζει το 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
Παρέχει βοηθητικά στοιχεία ρύθμισης παραμέτρων, όπως ο έλεγχος αν η κατάσταση αποθήκευσης στο cache έχει λήξει.
class ConfigHelper {
static checkStorageStateExpiration(
statePath: string
): { expired: boolean; expiresOn?: number }
}
Βοηθητικά προγράμματα εντοπισμού
Μέθοδοι βοηθητικών στοιχείων για τον εντοπισμό Power Apps στοιχείων ελέγχου εντός iframe.
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';