אמולציה של מכשירים ניידים

Chrome מאפשר למשתמשים לחקות את Chrome במכשיר נייד (כמו טאבלט Nexus 7 או iPhone 5) מגרסת 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 ולרוב ניתן להשמיט אותו.
  • "mobile" - האם הדפדפן חייב להתנהג כסוכן משתמש לנייד (פסי גלילה בשכבת-על, פלט אירועי כיוון, כיווץ התוכן בהתאם לאזור התצוגה וכו'). ערך ברירת המחדל הוא True ולרוב ניתן להשמיט אותו.

המילון "clientHints" יכול לכלול את הערכים הבאים:

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