انتقل إلى المحتوى الرئيسي

كائن المتصفح

يمتد: EventEmitter

كائن المتصفح هو مثيل الجلسة الذي تستخدمه للتحكم في المتصفح أو الجهاز المحمول. إذا كنت تستخدم مشغل اختبار WDIO، يمكنك الوصول إلى مثيل WebDriver من خلال الكائن العالمي browser أو driver أو استيراده باستخدام @wdio/globals. إذا كنت تستخدم WebdriverIO في الوضع المستقل، يتم إرجاع كائن المتصفح بواسطة طريقة remote.

يتم تهيئة الجلسة بواسطة مشغل الاختبار. وينطبق الشيء نفسه على إنهاء الجلسة. يتم ذلك أيضًا بواسطة عملية مشغل الاختبار.

الخصائص

يحتوي كائن المتصفح على الخصائص التالية:

الاسمالنوعالتفاصيل
capabilitiesObjectالإمكانات المعينة من الخادم البعيد.
مثال:
{
acceptInsecureCerts: false,
browserName: 'chrome',
browserVersion: '105.0.5195.125',
chrome: {
chromedriverVersion: '105.0.5195.52',
userDataDir: '/var/folders/3_/pzc_f56j15vbd9z3r0j050sh0000gn/T/.com.google.Chrome.76HD3S'
},
'goog:chromeOptions': { debuggerAddress: 'localhost:64679' },
networkConnectionEnabled: false,
pageLoadStrategy: 'normal',
platformName: 'mac os x',
proxy: {},
setWindowRect: true,
strictFileInteractability: false,
timeouts: { implicit: 0, pageLoad: 300000, script: 30000 },
unhandledPromptBehavior: 'dismiss and notify',
'webauthn:extension:credBlob': true,
'webauthn:extension:largeBlob': true,
'webauthn:virtualAuthenticators': true
}
requestedCapabilitiesObjectالإمكانات المطلوبة من الخادم البعيد.
مثال:
{ browserName: 'chrome' }
sessionIdStringمعرف الجلسة المعين من الخادم البعيد.
optionsObjectخيارات WebdriverIO options تعتمد على كيفية إنشاء كائن المتصفح. انظر المزيد في أنواع الإعداد.
commandListString[]قائمة بالأوامر المسجلة لمثيل المتصفح
isW3CBooleanيشير إلى ما إذا كانت هذه جلسة W3C
isChromeBooleanيشير إلى ما إذا كان هذا مثيل Chrome
isFirefoxBooleanيشير إلى ما إذا كان هذا مثيل Firefox
isBidiBooleanيشير إلى ما إذا كانت هذه الجلسة تستخدم Bidi
isSauceBooleanيشير إلى ما إذا كانت هذه الجلسة تعمل على Sauce Labs
isMacAppBooleanيشير إلى ما إذا كانت هذه الجلسة تعمل لتطبيق Mac أصلي
isWindowsAppBooleanيشير إلى ما إذا كانت هذه الجلسة تعمل لتطبيق Windows أصلي
isMobileBooleanيشير إلى جلسة الجوال. انظر المزيد تحت علامات الجوال.
isIOSBooleanيشير إلى جلسة iOS. انظر المزيد تحت علامات الجوال.
isAndroidBooleanيشير إلى جلسة Android. انظر المزيد تحت علامات الجوال.
isNativeContextBooleanيشير إلى ما إذا كان الجوال في سياق NATIVE_APP. انظر المزيد تحت علامات الجوال.
mobileContextstringسيوفر السياق الحالي الذي يوجد فيه برنامج التشغيل، على سبيل المثال NATIVE_APP، WEBVIEW_<packageName> لأندرويد أو WEBVIEW_<pid> لـ iOS. سيوفر WebDriver إضافي لـ driver.getContext(). انظر المزيد تحت علامات الجوال.

الطرق

بناءً على خلفية الأتمتة المستخدمة لجلستك، يحدد WebdriverIO أوامر البروتوكول التي سيتم إرفاقها بـ كائن المتصفح. على سبيل المثال، إذا قمت بتشغيل جلسة آلية في Chrome، ستتمكن من الوصول إلى أوامر Chromium المحددة مثل elementHover ولكن ليس أي من أوامر Appium.

علاوة على ذلك، يوفر WebdriverIO مجموعة من الطرق المريحة التي يوصى باستخدامها للتفاعل مع المتصفح أو العناصر في الصفحة.

بالإضافة إلى ذلك، تتوفر الأوامر التالية:

الاسمالمعلماتالتفاصيل
addCommand- commandName (النوع: String)
- fn (النوع: Function)
- attachToElement (النوع: boolean)
يسمح بتعريف أوامر مخصصة يمكن استدعاؤها من كائن المتصفح لأغراض التكوين. اقرأ المزيد في دليل الأوامر المخصصة.
overwriteCommand- commandName (النوع: String)
- fn (النوع: Function)
- attachToElement (النوع: boolean)
يسمح بالكتابة فوق أي أمر متصفح بوظائف مخصصة. استخدمه بحذر لأنه قد يربك مستخدمي الإطار. اقرأ المزيد في دليل الأوامر المخصصة.
addLocatorStrategy- strategyName (النوع: String)
- fn (النوع: Function)
يسمح بتعريف استراتيجية محدد مخصصة، اقرأ المزيد في دليل المحددات.

ملاحظات

علامات الجوال

إذا كنت بحاجة إلى تعديل اختبارك بناءً على ما إذا كانت جلستك تعمل على جهاز محمول أم لا، يمكنك الوصول إلى علامات الجوال للتحقق.

على سبيل المثال، بالنظر إلى هذا التكوين:

// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}

يمكنك الوصول إلى هذه العلامات في اختبارك على النحو التالي:

// ملاحظة: `driver` هو المكافئ للكائن `browser` ولكنه أكثر دقة من الناحية الدلالية
// يمكنك اختيار أي متغير عالمي تريد استخدامه
console.log(driver.isMobile) // المخرجات: true
console.log(driver.isIOS) // المخرجات: true
console.log(driver.isAndroid) // المخرجات: false

يمكن أن يكون هذا مفيدًا إذا كنت تريد، على سبيل المثال، تحديد المحددات في كائنات الصفحة بناءً على نوع الجهاز، مثل هذا:

// mypageobject.page.js
import Page from './page'

class LoginPage extends Page {
// ...
get username() {
const selectorAndroid = 'new UiSelector().text("Cancel").className("android.widget.Button")'
const selectorIOS = 'UIATarget.localTarget().frontMostApp().mainWindow().buttons()[0]'
const selectorType = driver.isAndroid ? 'android' : 'ios'
const selector = driver.isAndroid ? selectorAndroid : selectorIOS
return $(`${selectorType}=${selector}`)
}
// ...
}

يمكنك أيضًا استخدام هذه العلامات لتشغيل اختبارات معينة فقط لأنواع معينة من الأجهزة:

// mytest.e2e.js
describe('my test', () => {
// ...
// قم بتشغيل الاختبار فقط مع أجهزة Android
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})

الأحداث

كائن المتصفح هو EventEmitter ويتم إصدار مجموعة من الأحداث لحالات الاستخدام الخاصة بك.

فيما يلي قائمة بالأحداث. ضع في اعتبارك أن هذه ليست القائمة الكاملة للأحداث المتاحة بعد. لا تتردد في المساهمة لتحديث المستند بإضافة أوصاف لمزيد من الأحداث هنا.

command

يتم إصدار هذا الحدث كلما أرسل WebdriverIO أمر WebDriver الكلاسيكي. يحتوي على المعلومات التالية:

  • command: اسم الأمر، مثل navigateTo
  • method: طريقة HTTP المستخدمة لإرسال طلب الأمر، مثل POST
  • endpoint: نقطة نهاية الأمر، مثل /session/fc8dbda381a8bea36a225bd5fd0c069b/url
  • body: حمولة الأمر، مثل { url: 'https://webdriver.io' }

result

يتم إصدار هذا الحدث كلما تلقى WebdriverIO نتيجة أمر WebDriver الكلاسيكي. يحتوي على نفس المعلومات الموجودة في حدث command بالإضافة إلى المعلومات التالية:

  • result: نتيجة الأمر

bidiCommand

يتم إصدار هذا الحدث كلما أرسل WebdriverIO أمر WebDriver Bidi إلى برنامج تشغيل المتصفح. يحتوي على معلومات حول:

  • method: طريقة أمر WebDriver Bidi
  • params: معلمة الأمر المرتبطة (انظر API)

bidiResult

في حالة نجاح تنفيذ الأمر، سيكون حمولة الحدث:

  • type: success
  • id: معرف الأمر
  • result: نتيجة الأمر (انظر API)

في حالة حدوث خطأ في الأمر، ستكون حمولة الحدث:

  • type: error
  • id: معرف الأمر
  • error: رمز الخطأ، مثل invalid argument
  • message: تفاصيل حول الخطأ
  • stacktrace: تتبع المكدس

request.start

يتم إطلاق هذا الحدث قبل إرسال طلب WebDriver إلى برنامج التشغيل. يحتوي على معلومات حول الطلب وحمولته.

browser.on('request.start', (ev: RequestInit) => {
// ...
})

request.end

يتم إطلاق هذا الحدث بمجرد تلقي الطلب المرسل إلى برنامج التشغيل استجابة. يحتوي كائن الحدث إما على نص الاستجابة كنتيجة أو خطأ إذا فشل أمر WebDriver.

browser.on('request.end', (ev: { result: unknown, error?: Error }) => {
// ...
})

request.retry

يمكن أن يخطرك حدث إعادة المحاولة عندما يحاول WebdriverIO إعادة تشغيل الأمر، على سبيل المثال بسبب مشكلة في الشبكة. يحتوي على معلومات حول الخطأ الذي تسبب في إعادة المحاولة وعدد المحاولات التي تم إجراؤها بالفعل.

browser.on('request.retry', (ev: { error: Error, retryCount: number }) => {
// ...
})

request.performance

هذا حدث لقياس عمليات مستوى WebDriver. كلما أرسل WebdriverIO طلبًا إلى خلفية WebDriver، سيتم إصدار هذا الحدث مع بعض المعلومات المفيدة:

  • durationMillisecond: المدة الزمنية للطلب بالمللي ثانية.
  • error: كائن الخطأ إذا فشل الطلب.
  • request: كائن الطلب. يمكنك العثور على عنوان URL والطريقة والرؤوس وما إلى ذلك.
  • retryCount: إذا كان 0، فإن الطلب كان المحاولة الأولى. سيزداد عندما يعيد WebDriverIO المحاولة في الخلفية.
  • success: قيمة منطقية لتمثيل نجاح الطلب أم لا. إذا كانت false، فسيتم توفير خاصية error أيضًا.

مثال على الحدث:

Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},

الأوامر المخصصة

يمكنك تعيين أوامر مخصصة في نطاق المتصفح لتجريد سير العمل المستخدم بشكل شائع. تحقق من دليلنا حول الأوامر المخصصة للحصول على مزيد من المعلومات.

Welcome! How can I help?

WebdriverIO AI Copilot