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

באמצעות 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);

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 מילון:

  • &quot;width&quot; - הרוחב בפיקסלים של מסך המכשיר
  • גובה - הגובה בפיקסלים של מסך המכשיר
  • 'pixelRatio' - יחס הפיקסלים של המכשיר
  • "touch" - האם לבצע אמולציה של אירועי מגע. ערך ברירת המחדל הוא True ובדרך כלל אפשר להשמיט אותו.
  • "mobile" - האם הדפדפן חייב להתנהג כסוכן משתמש לנייד (סרגלי גלילה שכבת-על, אירועי כיוון פלט, כיווץ התוכן כך שיתאים לאזור התצוגה וכו'). ערך ברירת המחדל הוא True ובדרך כלל אפשר להשמיט אותו.

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

  • פלטפורמה - מערכת ההפעלה. הוא יכול להיות ערך ידוע ('Android', 'Chrome OS', 'Chromium OS', 'Fuchsia', 'Linux', 'macOS', 'Windows'), שתואם בדיוק לערך ש-Chrome מחזיר בפלטפורמה הנתונה, או שהערך שלו מוגדר על ידי המשתמש. חובה להזין ערך זה.
  • "mobile" - האם הדפדפן צריך לבקש גרסה של משאב לנייד או למחשב. בדרך כלל, דפדפן Chrome שפועל בטלפון נייד עם Android מגדיר את הערך הזה כ-true. Chrome במכשיר Android בטאבלט מגדיר את הערך הזה כ-False. גם Chrome במחשב שולחני מגדיר את הערך הזה כ-False. ניתן להשתמש במידע הזה כדי לציין אמולציה ריאליסטית. חובה להזין ערך זה.
  • הערכים הנותרים הם אופציונליים וניתן להשמיט אותם, אלא אם הם רלוונטיים לבדיקה:
    • מותגים - רשימה של ��וגות מותג / גרסה ראשית. אם לא מזינים, הדפדפן משתמש בערכים משלו.
    • &quot;fullVersionList&quot; - רשימה של זוגות מותג / גרסה. הדפדפן לא משתמש בערכים משלו.
    • 'platformVersion' - גרסת מערכת ההפעלה. ברירת המחדל היא מחרוזת ריקה.
    • &quot;model&quot; - דגם המכשיר. ברירת המחדל היא מחרוזת ריקה.
    • 'ארכיטקטורה' - ארכיטקטורת CPU (מעבדים). הערכים הידועים הם 'x86' ו-arm. המשתמש יכול לספק כל ערך במחרוזת. ברירת המחדל היא מחרוזת ריקה.
    • סיביות - ביטים של הפלטפורמה. הערכים המוכרים הם "32" ו-64. המשתמש יכול לספק כל ערך במחרוזת. ברירת המחדל היא מחרוזת ריקה.
    • 'wow64' - אמולציה של Windows 32 ב-Windows 64. ערך בוליאני שברירת המחדל שלו היא False.

ChromeDriver יכול להסיק את "סוכן המשתמש" ערך מ-"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) לא זמינים.