يتيح Chrome للمستخدمين محاكاة Chrome على جهاز جوّال من إصدار Chrome المخصّص لأجهزة الكمبيوتر، وذلك من خلال تفعيل وضع الجهاز باستخدام "أدوات مطوري البرامج في Chrome". تؤدي هذه الميزة إلى تسريع تطوير الويب، وتسمح للمطوّرين باختبار كيفية معالجة موقع إلكتروني على جهاز جوّال بسرعة، بدون الحاجة إلى جهاز حقيقي. ويمكن أيضًا لـ ChromeDriver محاكاة الأجهزة باستخدام ميزة "mobileEmulation" المحددة باستخدام قيمة قاموس.
كما هو الحال في "أدوات مطوّري البرامج"، تتوفّر طريقتان في ChromeDriver لتفعيل ميزة "محاكاة الأجهزة الجوّالة":
- تحديد جهاز معروف
- تحديد سمات الأجهزة الفردية
تعتمد صيغة معجم mobileEmulation على الطريقة المطلوبة.
تحديد جهاز جوّال معروف
لتفعيل محاكاة الجهاز باستخدام جهاز معيّن، يجب أن يحتوي قاموس "mobileEmulation" على "deviceName". استخدِم اسم جهاز صالحًا من إعدادات الأجهزة التي تمت محاكاتها في "أدوات مطوّري البرامج" كقيمة "deviceName".
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
وclientHints
وسلسلة userAgent
.
يجب تحديد مقاييس الجهاز التالية في القاموس "deviceMetrics":
- "width": عرض شاشة الجهاز بالبكسل
- "height": ارتفاع شاشة الجهاز بالبكسل
- "pixelRatio": نسبة وحدات البكسل على الجهاز
- "touch" - ما إذا كان سيتم محاكاة أحداث اللمس. ويتم ضبط القيمة تلقائيًا على "صحيح" ويمكن حذفها عادةً.
- "mobile": ما إذا كان يجب أن يتصرّف المتصفّح كوكيل مستخدم على الأجهزة الجوّالة (تداخل أشرطة التمرير، وعرض أحداث الاتجاه، وتصغير المحتوى ليلائم مساحة العرض، وما إلى ذلك) ويتم ضبط القيمة تلقائيًا على "صحيح" ويمكن حذفها عادةً.
يمكن أن يحتوي قاموس "clientHints" على الإدخالات التالية:
- "platform": نظام التشغيل يمكن أن تكون قيمة معروفة ("Android" أو "ChromeOS" أو "ChromiumOS" أو "Fuchsia" أو "Linux" أو "macOS" أو "Windows") تتطابق تمامًا مع القيمة التي يعرضها Chrome الذي يعمل على النظام الأساسي المحدّد، أو يمكن أن تكون قيمة يحدّدها المستخدم. هذه القيمة إلزامية.
- "mobile": ما إذا كان المتصفّح سيطلب إصدارًا مخصّصًا للأجهزة الجوّالة أو للكمبيوتر المكتبي من المرجع عادةً ما يضبط Chrome الذي يعمل على هاتف جوّال يعمل بنظام التشغيل Android هذه القيمة على true. ويضبط Chrome على جهاز Android لوحي هذه القيمة على "خطأ". يضبط Chrome على جهاز كمبيوتر مكتبي هذه القيمة أيضًا على false. ويمكنك استخدام هذه المعلومات لتحديد محاكاة واقعية. هذه القيمة إلزامية.
- إنّ الإدخالات المتبقية اختيارية ويمكن حذفها ما لم تكن ذات صلة بالاختبار:
- "العلامات التجارية" - قائمة بأزواج العلامات التجارية / الإصدارات الرئيسية. في حال عدم إدخال هذه القيم، سيستخدم المتصفّح قيمه الخاصة.
- "fullVersionList": قائمة بزوجات العلامة التجارية / الإصدار تم حذف أنّ المتصفّح يستخدم قيمه الخاصة.
- "platformVersion": إصدار نظام التشغيل إعداد تلقائي على سلسلة فارغة.
- "الطراز" - طراز الجهاز. القيمة التلقائية هي سلسلة فارغة.
- "البنية": بنية وحدة المعالجة المركزية (CPU). القيم المعروفة هي "x86" و "arm". يستطيع المستخدم تقديم أي قيمة سلسلة. القيمة التلقائية هي سلسلة فارغة.
- "bitness" - وحدة بت النظام الأساسي. القيمتان المعروفة هي "32" و"64". يُتاح للمستخدم تقديم أي قيمة سلسلة. إعداد تلقائي على سلسلة فارغة.
- "wow64": لمحاكاة نظام التشغيل Windows 32 على نظام التشغيل Windows 64 قيمة منطقية تكون القيمة التلقائية لها هي "خطأ".
يمكن لواجهة ChromeDriver استنتاج قيمة userAgent من clientHints على الأنظمة الأساسية التالية: Android وChromeOS وChromiumOS وFuchsia وLinux وmacOS وWindows. وبالتالي، يمكن حذف هذه القيمة.
في حال حذف قاموس "clientHints" (الوضع القديم)، يبذل ChromeDriver قصارى جهده لاستنتاج "clientHints" من "userAgent". هذه الميزة غير موثوقة، بسبب الغموض الداخلي في تنسيق قيمة "userAgent".
يمكن العثور على الهواتف والأجهزة اللوحية المتوفّرة ضمن لوحة "محاكاة الأجهزة الجوّالة" في رمز مصدر "أدوات مطوّري البرامج".
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
}
}
الفرق بين محاكاة الأجهزة الجوّالة والأجهزة الحقيقية
من المفيد اختبار المواقع الإلكترونية على كمبيوتر مكتبي باستخدام ميزة محاكاة الأجهزة الجوّالة، ولكنّها لا تُمثّل نسخة طبق الأصل من الاختبار على الجهاز الفعلي. هناك بعض الاختلافات الرئيسية، بما في ذلك:
- غالبًا ما تحتوي الأجهزة الجوّالة على وحدة معالجة رسومات مختلفة، ما قد يؤدي إلى تغييرات كبيرة في الأداء.
- لا تتم محاكاة واجهة مستخدم الجوّال (خصوصًا أن إخفاء شريط العناوين يؤثر في ارتفاع الصفحة).
- لا تتوفّر النوافذ المنبثقة لإزالة الالتباس (التي تختار فيها أحد أهداف اللمس القليلة).
- لا تتوفّر العديد من واجهات برمجة التطبيقات للأجهزة (مثل حدث
orientationchange
).