नोट
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप साइन इन करने या निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
यह Power Platform Playwright टूलकिट API संदर्भ सार्वजनिक वर्गों, विधियों और प्रकारों के दस्तावेज़ों का उपयोग आप कैनवास और मॉडल-चालित ऐप्स के एंड-टू-एंड परीक्षण को स्वचालित करने के लिए कर सकते हैं।
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()
Xrm क्लाइंट API तक पूर्ण पहुँच के साथ ब्राउज़र के प्रपत्र संदर्भ में मनमाना कोड चलाता है:
const value = await mda.form.execute(
(ctx) => ctx.getAttribute('nwind_ordernumber')?.getValue()
);
विस्तृत उपयोग के लिए प्रपत्र संदर्भ के माध्यम से एपीआई परीक्षण देखें।
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
UCI पूर्वावलोकन iframe के लिए उजागर करता है FrameLocator । जनरेट किए गए प्रपत्र तत्वों को सीधे क्वेरी करने के लिए इस गुण का उपयोग करें:
const input = genUxPage.previewFrame.getByRole('textbox', { name: 'First Name' });
await expect(input).toBeVisible();
GenUxPage.verifyThoughtStreaming()
क्षणिक GenUX स्ट्रीमिंग संकेतकों की जाँच करता है, जैसे कि विचार पाठ, स्टॉप बटन और एजेंट विचार। प्रत्येक चेक सर्वोत्तम-प्रयास है - सभी संकेतक दिखाई देने से पहले पीढ़ी पूरी हो सकती है। एकमात्र कठिन दावा यह है कि या तो स्ट्रीमिंग प्रगति पर है या दिखाई "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 }
}
लोकेटर उपयोगिताएँ
iframes के भीतर Power Apps नियंत्रणों का पता लगाने के लिए सहायक विधियाँ.
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';