मोबाइल एम्युलेशन

Chrome, उपयोगकर्ताओं को Chrome DevTools के साथ डिवाइस मोड चालू करके, उपयोगकर्ताओं को Chrome के डेस्कटॉप वर्शन से मोबाइल डिवाइस पर Chrome को एम्युलेट करने की अनुमति देता है. इस सुविधा से वेब डेवलपमेंट की रफ़्तार तेज़ हो जाती है. इसकी मदद से डेवलपर तुरंत यह जांच कर सकते हैं कि कोई वेबसाइट मोबाइल डिवाइस पर कैसे रेंडर होती है. इसके लिए, किसी असली डिवाइस की ज़रूरत नहीं होती. ChromeDriver, "mobileEmulation" की सुविधा वाले डिवाइसों को भी एम्युलेट कर सकता है. इस सुविधा के बारे में डिक्शनरी वैल्यू से पता चलता है.

DevTools की तरह, ChromeDriver में भी मोबाइल एम्युलेटर को चालू करने के दो तरीके हैं:

  • किसी ऐसे डिवाइस की जानकारी दें जिसका इस्तेमाल पहले किया जा चुका है
  • अलग-अलग डिवाइस के एट्रिब्यूट की जानकारी देना

"mobileEmulation" डिक्शनरी का फ़ॉर्मैट इस बात पर निर्भर करता है कि आपको किस तरीके का इस्तेमाल करना है.

किसी ज्ञात मोबाइल डिवाइस को दर्ज करें

किसी खास डिवाइस के लिए डिवाइस इम्यूलेशन की सुविधा चालू करने के लिए, "mobileEmulation" डिक्शनरी में "deviceName" होना चाहिए. "deviceName" की वैल्यू के तौर पर, DevTools में एमुलेट किए गए डिवाइसों की सेटिंग में मौजूद, डिवाइस के किसी मान्य नाम का इस्तेमाल करें.

डिवाइस सेटिंग का स्क्रीनशॉट

Java

Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "Nexus 5");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
WebDriver driver = new ChromeDriver(chromeOptions);

Ruby

mobile_emulation = { "deviceName" => "Nexus 5" }
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
   "chromeOptions" => { "mobileEmulation" => mobile_emulation })
driver = Selenium::WebDriver.for :remote, url: 'http://localhost:4444/wd/hub',
desired_capabilities: caps

Python

from selenium import webdriver
mobile_emulation = { "deviceName": "Nexus 5" }
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities = chrome_options.to_capabilities())

डिवाइस की अलग-अलग विशेषताएं तय करना

अलग-अलग एट्रिब्यूट की जानकारी देकर, मोबाइल इम्यूलेशन की सुविधा चालू की जा सकती है. "mobileEmulation" डिक्शनरी में deviceMetrics, clientHints डिक्शनरी, और userAgent स्ट्रिंग शामिल हो सकती है.

"deviceMetrics" शब्दकोश में इन डिवाइस मेट्रिक के बारे में बताना ज़रूरी है:

  • "width" - डिवाइस की स्क्रीन की चौड़ाई, पिक्सल में
  • "height" - डिवाइस की स्क्रीन की ऊंचाई, पिक्सल में
  • "pixelRatio" - डिवाइस का पिक्सल रेशियो
  • "touch" - टच इवेंट को एमुलेट करना है या नहीं. इसकी वैल्यू डिफ़ॉल्ट रूप से 'सही' होती है और आम तौर पर इसे छोड़ा जा सकता है.
  • "mobile" - क्या ब्राउज़र को मोबाइल उपयोगकर्ता एजेंट के तौर पर काम करना चाहिए (स्क्रोलबार ओवरले करना, ओरिएंटेशन इवेंट उत्सर्जित करना, व्यूपोर्ट में फ़िट करने के लिए कॉन्टेंट को छोटा करना वगैरह). यह वैल्यू डिफ़ॉल्ट रूप से 'सही' पर सेट होती है. इसे हटाया जा सकता है.

"clienthints" शब्दकोश में ये एंट्री हो सकती हैं:

  • "platform" - ऑपरेटिंग सिस्टम. यह या तो ज्ञात मान ("Android", "Chrome OS", "Chromium OS", "FUCsia", "Linux", "macOS", "Windows") हो सकता है, जो दिए गए प्लेटफ़ॉर्म पर Chrome द्वारा लौटाए गए मान से सटीक रूप से मेल खाता हो या यह उपयोगकर्ता द्वारा निर्धारित मान हो सकता है. यह वैल्यू ज़रूरी है.
  • "mobile" - ब्राउज़र को मोबाइल या डेस्कटॉप, दोनों में से किस वर्शन का अनुरोध करना चाहिए. आम तौर पर, Android वाले मोबाइल फ़ोन पर Chrome चलाने पर, यह वैल्यू 'सही' पर सेट हो जाती है. टैबलेट वाले Android डिवाइस पर Chrome, इस वैल्यू को 'गलत' पर सेट करता है. डेस्कटॉप डिवाइस पर Chrome भी इस वैल्यू को 'गलत' पर सेट करता है. इस जानकारी का इस्तेमाल, सबसे सही एम्युलेशन तय करने के लिए किया जा सकता है. यह वैल्यू डालना ज़रूरी है.
  • बाकी एंट्री देना ज़रूरी नहीं है. इन्हें तब तक छोड़ा जा सकता है, जब तक कि ये टेस्ट के लिए काम की न हों:
    • "ब्रैंड" - ब्रैंड / मेजर वर्शन पेयर की सूची. अगर इस पैरामीटर को शामिल नहीं किया जाता है, तो ब्राउज़र अपनी वैल्यू का इस्तेमाल करता है.
    • "fullVersionList" - ब्रैंड / वर्शन पेयर की सूची. इसमें यह जानकारी नहीं दी गई है कि ब्राउज़र अपनी वैल्यू का इस्तेमाल करता है.
    • "platformVersion" - ऑपरेटिंग सिस्टम का वर्शन. डिफ़ॉल्ट रूप से, यह खाली स्ट्रिंग होती है.
    • "model" - डिवाइस का मॉडल. डिफ़ॉल्ट रूप से, यह खाली स्ट्रिंग होती है.
    • " आर्किटेक्चर" - सीपीयू आर्किटेक्चर. "x86" और "arm", ये वैल्यू इस्तेमाल की जा सकती हैं. उपयोगकर्ता अपनी पसंद के मुताबिक कोई भी स्ट्रिंग वैल्यू दे सकता है. डिफ़ॉल्ट रूप से, यह खाली स्ट्रिंग होती है.
    • "bitness" - प्लैटफ़ॉर्म का बिट रेट. "32" और "64" वैल्यू इस्तेमाल की जा सकती हैं. उपयोगकर्ता कोई भी स्ट्रिंग वैल्यू दे सकता है. डिफ़ॉल्ट रूप से, यह खाली स्ट्रिंग होती है.
    • "wow64" - Windows 64 पर Windows 32 का इम्यूलेशन. एक बूलियन वैल्यू, जो डिफ़ॉल्ट रूप से 'गलत' पर सेट होती है.

ChromeDriver, इन प्लैटफ़ॉर्म पर "clienthints" से "userAgent" वैल्यू का अनुमान लगा सकता है: "Android", "Chrome OS", "Chromium OS", "FUCsia", "Linux", "macOS", "Windows". इसलिए, इस वैल्यू को छोड़ा जा सकता है.

अगर "clientHints" डिक्शनरी को छोड़ दिया जाता है (लेगसी मोड), तो ChromeDriver "userAgent" से "clientHints" का अनुमान लगाने की पूरी कोशिश करता है. "userAgent" वैल्यू के फ़ॉर्मैट में अंदरूनी गड़बड़ियों की वजह से, इस सुविधा पर भरोसा नहीं किया जा सकता.

मोबाइल एम्युलेशन पैनल में उपलब्ध फ़ोन और टैबलेट DevTools सोर्स कोड में मिल सकते हैं.

Java

Map<String, Object> deviceMetrics = new HashMap<>();
deviceMetrics.put("width", 360);
deviceMetrics.put("height", 640);
deviceMetrics.put("pixelRatio", 3.0);
Map<String, Object> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceMetrics", deviceMetrics);
mobileEmulation.put("userAgent", "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19");
Map<String, Object> clientHints = new HashMap<>();
clientHints.put("platform", "Android");
clientHints.put("mobile", true);
mobileEmulation.put("clientHints", clientHints);
ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation); WebDriver driver = new ChromeDriver(chromeOptions);

Ruby

mobile_emulation = {
   "deviceMetrics" => { "width" => 360, "height" => 640, "pixelRatio" => 3.0 },
   "userAgent" => "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
   "clientHints" => { "platform" => "Android", "mobile" => true}
}
caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => mobile_emulation)
driver = Selenium::WebDriver.for :remote, url: 'http://localhost:4444/wd/hub', desired_capabilities: caps

Python

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
mobile_emulation = {
   "deviceMetrics": { "width": 360, "height": 640, "pixelRatio": 3.0 },
   "userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
   "clientHints": {"platform": "Android", "mobile": True} }
chrome_options = Options()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(chrome_options = chrome_options)

मोबाइल एम्युलेशन के पूरे कॉन्फ़िगरेशन का उदाहरण:

JSON

"mobileEmulation": {
  "userAgent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/111.0.0.0 Mobile Safari/537.36",
  "deviceMetrics": {
     "mobile": true,
     "touch": true,
     "width": 412,
     "height": 823,
     "pixelRatio": 1.75
  },
  "clientHints": {
     "brands": [
        {"brand": "Google Chrome", "version": "111"},
        {"brand": "Chromium", "version": "111"}
     ],
     "fullVersionList": [
        {"brand": "Google Chrome", "version": "111.0.5563.64"},
        {"brand": "Chromium", "version": "111.0.5563.64"}
     ],
     "platform": "Android",
     "platformVersion": "11",
     "architecture": "arm",
     "model": "lorem ipsum (2022)"
     "mobile": true,
     "bitness": "32",
     "wow64": false
  }
}

मोबाइल इम्यूलेशन और असल डिवाइसों के बीच का अंतर

मोबाइल इम्यूलेशन की मदद से, डेस्कटॉप पर वेबसाइटों की जांच करना मददगार होता है. हालांकि, यह असल डिवाइस पर की जाने वाली जांच की पूरी तरह से नकल नहीं है. इनमें कुछ मुख्य अंतर हैं, जैसे:

  • मोबाइल डिवाइसों में अक्सर अलग जीपीयू होता है. इसकी वजह से, परफ़ॉर्मेंस में काफ़ी बदलाव हो सकते हैं.
  • मोबाइल यूज़र इंटरफ़ेस (यूआई) को एमुलेट नहीं किया जाता. खास तौर पर, पता बार को छिपाने से पेज की ऊंचाई पर असर पड़ता है.
  • साफ़ तौर पर जानकारी देने वाले पॉप-अप (जहां, टच टारगेट में से किसी एक को चुना जाता है) की सुविधा काम नहीं करती है.
  • कई हार्डवेयर एपीआई (उदाहरण के लिए, orientationchange इवेंट) उपलब्ध नहीं हैं.