মোবাইল এমুলেশন

ক্রোম ব্যবহারকারীদেরকে Chrome এর ডেস্কটপ সংস্করণ থেকে একটি মোবাইল ডিভাইসে (যেমন "Nexus 7" ট্যাবলেট বা "iPhone 5") Chrome অনুকরণ করতে দেয়, Chrome DevTools-এ মোবাইল এমুলেশন বৈশিষ্ট্য সক্ষম করে৷ এই বৈশিষ্ট্যটি ওয়েব ডেভেলপমেন্টকে ত্বরান্বিত করে, ডেভেলপারদের দ্রুত পরীক্ষা করার অনুমতি দেয় যে কীভাবে একটি ওয়েবসাইট একটি মোবাইল ডিভাইসে রেন্ডার করবে, একটি বাস্তব ডিভাইসের প্রয়োজন ছাড়াই। ChromeDriver একটি অভিধান মান সহ নির্দিষ্ট করা "মোবাইল ইমুলেশন" ক্ষমতার মাধ্যমে মোবাইল এমুলেশনও সক্ষম করতে পারে।

ঠিক যেমন DevTools এমুলেশন প্যানেলে, ChromeDriver-এ মোবাইল এমুলেশন সক্ষম করার দুটি উপায় রয়েছে: একটি পরিচিত ডিভাইস নির্দিষ্ট করে, বা পৃথক ডিভাইসের বৈশিষ্ট্যগুলি নির্দিষ্ট করে৷ "মোবাইল ইমুলেশন" অভিধানের বিন্যাস কোন পদ্ধতিটি কাঙ্ক্ষিত তার উপর নির্ভর করে।

একটি পরিচিত মোবাইল ডিভাইস নির্দিষ্ট করা

একটি নির্দিষ্ট ডিভাইসের নামের সাথে মোবাইল এমুলেশন সক্ষম করতে, "মোবাইল ইমুলেশন" অভিধানে অবশ্যই একটি "ডিভাইস নাম" থাকতে হবে। "deviceName" এর মান হিসাবে DevTools এমুলেশন প্যানেল থেকে একটি বৈধ ডিভাইসের নাম ব্যবহার করুন।

ডিভাইস সেটিং এর স্ক্রিনশট

জাভা

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

পাইথন

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())

স্বতন্ত্র ডিভাইস বৈশিষ্ট্য নির্দিষ্ট করা

পৃথক বৈশিষ্ট্য নির্দিষ্ট করে মোবাইল এমুলেশন সক্ষম করাও সম্ভব। এইভাবে মোবাইল ইমুলেশন সক্ষম করতে, "মোবাইল ইমুলেশন" অভিধানে "ডিভাইসমেট্রিক্স" এবং "ক্লায়েন্টহিন্টস" অভিধান এবং একটি "ব্যবহারকারী এজেন্ট" স্ট্রিং থাকতে পারে। নিম্নলিখিত ডিভাইস মেট্রিক্স অবশ্যই "deviceMetrics" অভিধানে উল্লেখ করা উচিত:

  • "প্রস্থ" - ডিভাইসের স্ক্রিনের পিক্সেলের প্রস্থ
  • "উচ্চতা" - ডিভাইসের স্ক্রিনের পিক্সেলের উচ্চতা
  • "pixelRatio" - ডিভাইসের পিক্সেল অনুপাত
  • "টাচ" - স্পর্শ ইভেন্টগুলিকে অনুকরণ করতে হবে কিনা৷ মান সত্যে ডিফল্ট হয় এবং সাধারণত বাদ দেওয়া যেতে পারে।
  • "মোবাইল" - ব্রাউজারটিকে অবশ্যই মোবাইল ব্যবহারকারী এজেন্ট হিসাবে আচরণ করতে হবে (ওভারলে স্ক্রলবার, অভিযোজন ইভেন্টগুলি নির্গত করা, ভিউপোর্টের সাথে মানানসই বিষয়বস্তু সঙ্কুচিত করা ইত্যাদি)। মান সত্যে ডিফল্ট হয় এবং সাধারণত বাদ দেওয়া যেতে পারে।

"ক্লায়েন্ট হিন্টস" অভিধানে নিম্নলিখিত এন্ট্রি থাকতে পারে:

  • "প্ল্যাটফর্ম" - অপারেটিং সিস্টেম। এটি একটি পরিচিত মান হতে পারে ("Android", "Chrome OS", "Chromium OS", "Fuchsia", "Linux", "macOS", "Windows"), যা ক্রোমের দ্বারা প্রত্যাবর্তিত মানের সাথে হুবহু মিলে যায় প্রদত্ত প্ল্যাটফর্ম, অথবা এটি একটি ব্যবহারকারীর সংজ্ঞায়িত মান হতে পারে। এই মান বাধ্যতামূলক.
  • "মোবাইল" - ব্রাউজারটি মোবাইল বা ডেস্কটপ রিসোর্স সংস্করণের অনুরোধ করবে কিনা। সাধারণত Android সহ একটি মোবাইল ফোনে চলমান Chrome এই মানটিকে সত্য হিসাবে সেট করে। একটি ট্যাবলেট অ্যান্ড্রয়েড ডিভাইসে Chrome এই মানটিকে মিথ্যাতে সেট করে৷ একটি ডেস্কটপ ডিভাইসে Chrome এই মানটিকে মিথ্যা হিসাবে সেট করে। আপনি একটি বাস্তবসম্মত অনুকরণ নির্দিষ্ট করতে এই তথ্য ব্যবহার করতে পারেন। এই মান বাধ্যতামূলক.
  • অবশিষ্ট এন্ট্রিগুলি ঐচ্ছিক এবং বাদ দেওয়া যেতে পারে যদি না সেগুলি পরীক্ষার জন্য প্রাসঙ্গিক হয়:
    • "ব্র্যান্ড" - ব্র্যান্ড / প্রধান সংস্করণ জোড়ার তালিকা। যদি বাদ দেওয়া হয় ব্রাউজার তার নিজস্ব মান ব্যবহার করে।
    • "fullVersionList" - ব্র্যান্ড/সংস্করণ জোড়ার তালিকা। এটি ব্রাউজারটি তার নিজস্ব মান ব্যবহার করে বাদ দিয়েছে।
    • "প্ল্যাটফর্ম সংস্করণ" - OS সংস্করণ। ডিফল্ট খালি স্ট্রিং.
    • "মডেল" - ডিভাইস মডেল। ডিফল্ট খালি স্ট্রিং.
    • "আর্কিটেকচার" - CPU আর্কিটেকচার। পরিচিত মান হল "x86" এবং "বাহু"। ব্যবহারকারী কোনো স্ট্রিং মান প্রদান করতে বিনামূল্যে. ডিফল্ট খালি স্ট্রিং.
    • "bitness" - প্ল্যাটফর্ম বিটনেস। পরিচিত মান হল "32" এবং "64"। ব্যবহারকারী কোনো স্ট্রিং মান প্রদান করতে বিনামূল্যে. ডিফল্ট খালি স্ট্রিং.
    • "wow64" - উইন্ডোজ 64-এ উইন্ডোজ 32 এর অনুকরণ। একটি বুলিয়ান মান যা ডিফল্ট করে মিথ্যা।

ChromeDriver নিম্নলিখিত প্ল্যাটফর্মগুলিতে "ক্লায়েন্টহিন্টস" থেকে "ইউজারএজেন্ট" মান অনুমান করতে সক্ষম: "Android", "Chrome OS", "Chromium OS", "Fuchsia", "Linux", "macOS", "Windows"। তাই এই মান বাদ দেওয়া যেতে পারে.

যদি "ক্লায়েন্টহিন্টস" অভিধানটি বাদ দেওয়া হয় (লেগেসি মোড) ChromeDriver "userAgent" থেকে "clientHints" অনুমান করার জন্য যথাসাধ্য চেষ্টা করে। "userAgent" মান বিন্যাসের অভ্যন্তরীণ অস্পষ্টতার কারণে এই কার্যকারিতা নির্ভরযোগ্যভাবে কাজ করে না।

মোবাইল এমুলেশন প্যানেলের অধীনে উপলব্ধ ফোন এবং ট্যাবলেটগুলি DevTools সোর্স কোডে পাওয়া যাবে।

জাভা

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

পাইথন

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

মোবাইল এমুলেশন এবং বাস্তব ডিভাইসের মধ্যে পার্থক্য

মোবাইল এমুলেশন ব্যবহার করে একটি ডেস্কটপে একটি মোবাইল ওয়েবসাইট পরীক্ষা করা দরকারী হতে পারে, তবে পরীক্ষকদের সচেতন হওয়া উচিত যে অনেক সূক্ষ্ম পার্থক্য রয়েছে যেমন:

  • সম্পূর্ণ ভিন্ন GPU, যা বড় কর্মক্ষমতা পরিবর্তন হতে পারে;
  • মোবাইল UI অনুকরণ করা হয় না (বিশেষ করে, লুকানো url বার পৃষ্ঠার উচ্চতাকে প্রভাবিত করে);
  • দ্ব্যর্থতা নিরসন পপআপ (যেখানে আপনি কয়েকটি স্পর্শ লক্ষ্যগুলির মধ্যে একটি নির্বাচন করেন) সমর্থিত নয়;
  • অনেক হার্ডওয়্যার API (উদাহরণস্বরূপ, ওরিয়েন্টেশন চেঞ্জ ইভেন্ট) অনুপলব্ধ।