switchContext
एक विशिष्ट वेबव्यू name
, title
, या url
का उपयोग करके एक विशिष्ट संदर्भ (context) में स्विच करें।
यह विधि डिफ़ॉल्ट Appium context
कमांड को हाइब्रिड मोबाइल एप्लिकेशन में नेटिव और वेबव्यू संदर्भों के बीच स्विच करने के लिए अधिक लचीलापन और सटीकता प्रदान करके बढ़ाती है।
संदर्भ कैसे काम करते हैं
हाइब्रिड ऐप्स और वेबव्यू के बारे में अवलोकन के लिए, हाइब्रिड ऐप्स दस्तावेज़ीकरण देखें।
नीचे switchContext
कमांड कैसे सामान्य चुनौतियों का समाधान करती है, इसका सारांश है:
Android की चुनौतियाँ
- वेबव्यू में अक्सर कई पेज (ब्राउज़र टैब के समान) होते हैं। सही पेज की पहचान करने के लिए अतिरिक्त मेटाडेटा जैसे
title
याurl
की आवश्यकता होती है, जो डिफ़ॉल्ट Appium विधियों द्वारा प्रदान नहीं किया जाता है। - डिफ़ॉल्ट Appium विधियाँ केवल बुनियादी संदर्भ नाम (जैसे,
WEBVIEW_{packageName}
) वापस करती हैं, वेबव्यू के भीतर सामग्री या पेजों के बारे में विवरण नहीं देती हैं। - Android पर संदर्भ स्विच करने में दो चरण शामिल हैं, जिन्हें इस विधि द्वारा स्वचालित रूप से संभाला जाता है:
WEBVIEW_{packageName}
का उपयोग करके वेबव्यू संदर्भ में स्विच करें।switchToWindow
विधि का उपयोग करके वेबव्यू के भीतर उपयुक्त पेज का चयन करें।
iOS की चुनौतियाँ
- वेबव्यू को जेनेरिक आईडी (जैसे,
WEBVIEW_{id}
) द्वारा पहचाना जाता है, जो सामग्री या उस ऐप स्क्रीन के बारे में जानकारी प्रदान नहीं करते हैं जिनसे वे संबंधित हैं। - इंटरैक्शन के लिए सही वेबव्यू का निर्धारण अक्सर प्रयास और त्रुटि की आवश्यकता होती है।
switchContext
विधि विस्तृत मेटाडेटा (जैसे, title
, url
, और दृश्यता) प्राप्त करके इस प्रक्रिया को सरल बनाती है, ताकि सटीक और विश्वसनीय संदर्भ स्विचिंग सुनिश्चित हो सके।
इस विधि का उपयोग क्यों करें?
- सरलीकृत स्विचिंग: यदि आप वांछित वेबव्यू का
title
याurl
जानते हैं, तो यह विधिgetContexts
के लिए अतिरिक्त कॉल याswitchContext({id})
औरgetTitle()
जैसी कई विधियों को संयोजित करने की आवश्यकता को समाप्त करती है। - स्वचालित संदर्भ मिलान: निम्न के आधार पर संदर्भ के लिए सर्वोत्तम मिलान खोजता है:
- प्लेटफॉर्म-विशिष्ट पहचानकर्ता (
bundleId
iOS के लिए,packageName
Android के लिए)। title
याurl
के लिए सटीक या आंशिक मिलान (स्ट्रिंग्स और रेगुलर एक्सप्रेशन दोनों का समर्थन करता है)।- Android-विशिष्ट जांच यह सुनिश्चित करने के लिए कि वेबव्यू अटैच्ड और दृश्यमान हैं।
- प्लेटफॉर्म-विशिष्ट पहचानकर्ता (
- बारीक नियंत्रण: कस्टम रीट्राई अंतराल और टाइमआउट (केवल Android) आपको वेबव्यू इनिशियलाइजेशन में देरी को संभालने की अनुमति देते हैं।
- डिफॉल्ट Appium विधि एक्सेस: यदि आवश्यक हो, तो आप
driver.switchAppiumContext()
के माध्यम से डिफॉल्ट AppiumswitchContext
कमांड का उपयोग कर सकते हैं।
नोट्स और सीमाएँ
- यदि वांछित वेबव्यू का
title
याurl
ज्ञात है, तो यह विधि अतिरिक्तgetContexts
कॉल के बिना मैचिंग संदर्भ को स्वचालित रूप से ढूंढ और स्विच कर सकती है। - Android-विशिष्ट विकल्प जैसे
androidWebviewConnectionRetryTime
औरandroidWebviewConnectTimeout
iOS पर लागू नहीं होते हैं। - डीबगिंग में सहायता के लिए संदर्भ-मिलान विफलताओं के कारणों को लॉग करता है।
- इनपुट के रूप में एक ऑब्जेक्ट का उपयोग करते समय,
title
याurl
में से एक आवश्यक है।
पैरामीटर्स
नाम | प्रकार | विवरण |
---|---|---|
context | string, SwitchContextOptions | स्विच करने के लिए संदर्भ का नाम। अधिक संदर्भ विकल्पों के साथ एक ऑब्जेक्ट प्रदान किया जा सकता है। |
options | SwitchContextOptions | switchContext कमांड विकल्प |
options.title optional | string, RegExp | स्विच करने के लिए पेज का शीर्षक। यह वेबव्यूपेज के टाइटल-टैग की सामग्री होगी। आप एक स्ट्रिंग का उपयोग कर सकते हैं जिसे पूरी तरह से मेल खाना चाहिए या एक रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं। महत्वपूर्ण: जब आप विकल्पों का उपयोग करते हैं तो title या url गुण आवश्यक है। |
options.url optional | string, RegExp | स्विच करने के लिए पेज का url। यह वेबव्यूपेज का url होगा। आप एक स्ट्रिंग का उपयोग कर सकते हैं जिसे पूरी तरह से मेल खाना चाहिए या एक रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं।महत्वपूर्ण: जब आप विकल्पों का उपयोग करते हैं तो title या url गुण आवश्यक है। |
options.androidWebviewConnectionRetryTime optional | number | वेबव्यू से कनेक्ट करने के प्रत्येक पुनः प्रयास के बीच प्रतीक्षा करने का समय मिलीसेकंड में। डिफॉल्ट 500 ms है (वैकल्पिक)। केवल-ANDROID और केवल तभी उपयोग किया जाएगा जब title या url प्रदान किया गया हो। |
options.androidWebviewConnectTimeout optional | number | वेब व्यू पेज का पता लगाने के लिए प्रतीक्षा करने के लिए अधिकतम समय मिलीसेकंड में। डिफॉल्ट 5000 ms है (वैकल्पिक)। केवल-ANDROID और केवल तभी उपयोग किया जाएगा जब title या url प्रदान किया गया हो। |
उदाहरण
example.test.js
it('should switch to a webview by name and uses the default Appium `context`-method', async () => {
// For Android, the context will be '`WEBVIEW_{packageName}`'
await driver.switchContext('WEBVIEW_com.wdiodemoapp')
// For iOS, the context will be 'WEBVIEW_{number}'
await driver.switchContext('WEBVIEW_94703.19')
})
exact.title.test.js
it('should switch to a webview and match a webview based on an EXACT match of the `title` of the webview', async () => {
await driver.switchContext({
// In this case the title needs to be an exact match
title: 'Webview Title',
})
})
exact.url.test.js
it('should switch to a webview and match a webview based on an EXACT match of the `title` of the webview', async () => {
await driver.switchContext({
// In this case the url needs to be an exact match
url: 'https://webdriver.io',
})
})
regex.title.url.test.js
it('should switch to a webview and match a webview based on regex match of the `title` and `url` of the webview', async () => {
await driver.switchContext({
// The title should NOT end with 'foo'
title: /^(?!.*foo$)/,
// Matches any string that contains the substring `docs/api/mobile/switchContext`
url: /.*docs\/api\/mobile\/switchContext/,
})
})
android.context.waits.test.js
it('should switch to a webview for Android but wait longer to connect and find a webview based on provided options', async () => {
await driver.switchContext({
// In this case the title need to be an exact match
title: 'Webview Title',
// 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
})
})