ב-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);
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' – האם לדמות אירועי מגע. ערך ברירת המחדל הוא true, ובדרך כלל אפשר להשמיט אותו.
- 'נייד' – האם הדפדפן צריך להתנהג כסוכנות משתמש לנייד (הצגת פס גלילה שכבת-על, שליחת אירועי כיוון, צמצום התוכן כך שיתאים למסך הצפייה וכו'). ערך ברירת המחדל הוא true, ובדרך כלל אפשר להשמיט אותו.
המילון clientHints יכול לכלול את הרשומות הבאות:
- "platform" - מערכת ההפעלה. הערך יכול להיות ערך ידוע ('Android', 'Chrome OS', 'Chromium OS', 'Fuchsia', 'Linux', 'macOS', 'Windows') שתואם בדיוק לערך שהוחזר על ידי Chrome שפועל בפלטפורמה הנתונה, או ערך שהוגדר על ידי המשתמש. הערך הזה הוא חובה.
- 'נייד' – האם הדפדפן צריך לבקש גרסה של המשאב לנייד או למחשב. בדרך כלל, Chrome שפועל בטלפון נייד עם Android מגדיר את הערך הזה כ-true. ב-Chrome במכשיר טאבלט Android, הערך הזה מוגדר כ-false. גם Chrome במחשב שולחני מגדיר את הערך הזה כ-False. אפשר להשתמש במידע הזה כדי לציין הדמיה מציאותית. הערך הזה הוא חובה.
- שאר הערכים הם אופציונליים ואפשר להשמיט אותם, אלא אם הם רלוונטיים לבדיקה:
- 'brands' – רשימה של זוגות של מותגים וגרסאות ראשיות. אם לא צוין ערך, הדפדפן ישתמש בערכים שלו.
- 'fullVersionList' – רשימה של צמדי מותגים / גרסאות. הדפדפן משתמש בערכים משלו.
- "platformVersion" – גרסת מערכת ההפעלה. ברירת המחדל היא מחרוזת ריקה.
- 'model' – דגם המכשיר. ברירת המחדל היא מחרוזת ריקה.
- 'ארכיטקטורה' – ארכיטקטורת המעבד (CPU). הערכים המוכרים הם x86 ו-arm. המשתמש יכול לספק כל ערך מחרוזת. ברירת המחדל היא מחרוזת ריקה.
- "bitness" - שיעור סיביות של פלטפורמה. הערכים הידועים הם 32 ו-64. המשתמש יכול לספק כל ערך במחרוזת. ברירת המחדל היא מחרוזת ריקה.
- "wow64" – אמולציה של Windows 32 ב-Windows 64. ערך בוליאני שמוגדר כברירת מחדל כ-false.
ChromeDriver יכול להסיק את הערך של 'userAgent' מ-'clientHints' בפלטפורמות הבאות: 'Android', 'Chrome OS', 'Chromium OS', '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);
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
}
}
ההבדל בין אמולציה של מכשירים ניידים לבין מכשירים אמיתיים
כדאי לבדוק אתרים במחשב עם אמולציה לנייד, אבל זה לא שכפול מושלם של בדיקה במכשיר עצמו. יש כמה הבדלים מרכזיים, כולל:
- במכשירים ניידים יש בדרך כלל מעבד GPU שונה, שעלול להוביל לשינויים משמעותיים בביצועים.
- אין אמולציה של ממשק המשתמש בנייד (בפרט, הסתרת סרגל הכתובות משפיעה על גובה הדף).
- אין תמיכה בחלונות קופצים ברורים (כשבוחרים באחד מכמה משטחי מגע).
- הרבה ממשקי API לחומרה (לדוגמה, אירוע
orientationchange
) לא זמינים.