الحصول على السياق
استرجاع سياق الجلسة الحالية.
تُحسّن هذه الطريقة أمر Appium الافتراضي context
/WebdriverIO getContext
من خلال توفير خيار
لإرجاع معلومات سياق مفصلة، مما يجعل العمل مع التطبيقات الهجينة التي تستخدم webviews أسهل.
كيف تعمل السياقات
راجع توثيق التطبيقات الهجينة لمزيد من المعلومات. فيما يلي شرح للتحديات المرتبطة بأمر getContext
:
بالنسبة لأندرويد:
- يمكن أن تحتوي Webviews على صفحات متعددة (مثل علامات تبويب المتصفح)، وتحديد الصفحة الصحيحة يتطلب بيانات وصفية إضافية
مثل
title
أوurl
. - توفر طرق Appium الافتراضية أسماء سياق أساسية فقط (مثل
WEBVIEW_{packageName}
) بدون معلومات مفصلة حول الصفحات داخل webview.
بالنسبة لـ iOS:
- يتم تحديد كل webview بواسطة سلسلة
WEBVIEW_{id}
عامة، والتي لا تشير إلى محتوياتها أو شاشة التطبيق التي تنتمي إليها.
لماذا تستخدم هذه الطريقة؟
- السلوك الافتراضي:
- يُرجع السياق الحالي كسلسلة (مثل
NATIVE_APP
أوWEBVIEW_{id}
).
- يُرجع السياق الحالي كسلسلة (مثل
- سياق مفصل:
- عند تمكين
returnDetailedContext
، يسترجع البيانات الوصفية مثل:- أندرويد:
packageName
وtitle
وurl
وwebviewPageId
. - iOS:
bundleId
وtitle
وurl
.
- أندرويد:
- عند تمكين
- خيارات خاصة بأندرويد:
- يمكن تخصيص فترات إعادة المحاولة والمهل الزمنية للتعامل مع تأخيرات في تهيئة webview.
ملاحظات وقيود
- إذا لم يتم تمكين
returnDetailedContext
، فإن الطريقة تتصرف مثل طريقة Appium الافتراضيةgetContext
. - إذا كنت ترغب في استخدام طريقة Appium "الافتراضية"
context
، يمكنك استخدام طريقةdriver.getAppiumContext()
، راجع أيضً ا أمر Appium Contexts. - أندرويد: الخيارات الخاصة بأندرويد (
androidWebviewConnectionRetryTime
وandroidWebviewConnectTimeout
) ليس لها تأثير على iOS. - تُسجل تحذيرات إذا تم العثور على سياقات مفصلة متعددة أو لم يتم العثور على أي منها:
لقد وجدنا أكثر من سياق مفصل واحد للسياق الحالي '{context}'. سنعيد السياق الأول.
لم نحصل على أي سياق مفصل للسياق الحالي '{context}'. سنعيد السياق الحالي كسلسلة.
المعلمات
الاسم | النوع | التفاصيل |
---|---|---|
options اختياري | GetContextsOptions | خيارات getContext (اختياري) |
options.returnDetailedContext اختياري | boolean | بشكل افتراضي، نقوم فقط بإرجاع اسم السياق بناءً على واجهة برمجة تطبيقات Appium الافتراضية context ، وهي مجرد سلسلة. إذا كنت ترغب في الحصول على معلومات سياق مفصلة، قم بتعيين هذا إلى true . الإعداد الافتراضي هو false (اختياري). |
options.androidWebviewConnectionRetryTime اختياري | number | الوقت بالميلي ثانية للانتظار بين كل محاولة للاتصال بـ webview. الإعداد الافتراضي هو 500 ميلي ثانية (اختياري). أندرويد فقط |
options.androidWebviewConnectTimeout اختياري | number | الحد الأقصى للوقت بالميلي ثانية للانتظار حتى يتم اكتشاف صفحة عرض الويب. الإعداد الافتراضي هو 5000 ميلي ثانية (اختياري). أندرويد فقط |
أمثلة
default.test.js
it('should return the current context with the default Appium `context` method', async () => {
// For Android
await driver.getContext()
// Returns 'WEBVIEW_com.wdiodemoapp' or 'NATIVE_APP'
//
// For iOS, the context will be 'WEBVIEW_{number}'
await driver.getContext()
// Returns 'WEBVIEW_94703.19' or 'NATIVE_APP'
})
detailed.test.js
it('should return the context of the current session with more detailed information', async () => {
// For Android
await driver.getContext({ returnDetailedContext: true})
// Returns or `NATIVE_APP`, or
// {
// id: 'WEBVIEW_com.wdiodemoapp',
// title: 'WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO',
// url: 'https://webdriver.io/',
// packageName: 'com.wdiodemoapp',
// webviewPageId: '5C0425CF67E9B169245F48FF21172912'
// }
//
// For iOS, the context will be 'WEBVIEW_{number}'
await driver.getContext({ returnDetailedContext: true})
// Returns or `NATIVE_APP`, or
// {
// id: 'WEBVIEW_64981.1',
// title: 'WebdriverIO · Next-gen browser and mobile automation test framework for Node.js | WebdriverIO',
// url: 'https://webdriver.io/',
// bundleId: 'org.reactjs.native.example.wdiodemoapp'
// }
})
customize.retry.test.js
it('should be able to cusomize the retry intervals and timeouts to handle delayed webview initialization', async () => {
// For Android
await driver.getContext({
returnDetailedContext: true,
// NOTE: The following options are Android-specific
// For Android we might need to wait a bit longer to connect to the webview, so we can provide some additional options
androidWebviewConnectionRetryTime: 1*1000, // Retry every 1 second
androidWebviewConnectTimeout: 10*1000, // Timeout after 10 seconds
})
})