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

Chrome, उपयोगकर्ताओं को Chrome के डेस्कटॉप वर्शन से किसी मोबाइल डिवाइस (जैसे कि "Nexus 7" टैबलेट या "iPhone 5") पर Chrome की नकल करने की अनुमति देता है. इसके लिए, उन्हें Chrome DevTools में मोबाइल एम्युलेशन सुविधा को चालू करना होता है. इस सुविधा की मदद से, वेब डेवलपमेंट तेज़ी से शुरू होता है. इसकी मदद से, डेवलपर तुरंत यह टेस्ट कर सकते हैं कि कोई वेबसाइट, मोबाइल डिवाइस पर कैसे रेंडर होगी. इसके लिए, किसी असल डिवाइस की ज़रूरत नहीं होती. 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);

रूबी

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" और "clientclients" डिक्शनरी और "userAgent" स्ट्रिंग हो सकती है. नीचे दिए गए डिवाइस मेट्रिक को "deviceMetrics" शब्दकोश में दर्ज किया जाना चाहिए:

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

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

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

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

अगर "clientclients" डिक्शनरी को हटा दिया जाता है (लेगसी मोड) तो, 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);

रूबी

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
  }
}

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

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

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