Chrome memungkinkan pengguna mengemulasi Chrome di perangkat seluler dari desktop Chrome versi terbaru, dengan mengaktifkan mode perangkat dengan Chrome DevTools. Fitur ini mempercepat pengembangan web, memungkinkan pengembang untuk menguji dengan cepat bagaimana bisa dirender di perangkat seluler, tanpa memerlukan perangkat sungguhan. ChromeDriver dapat juga mengemulasi perangkat dengan model "mobileEmulation" kapabilitas yang ditentukan dengan nilai kamus.
Seperti di DevTools, ada dua cara di ChromeDriver untuk mengaktifkan Emulasi Seluler:
- Menentukan perangkat yang dikenal
- Menentukan atribut perangkat individual
Format "mobileEmulation" kamus tergantung pada metode mana yang diperlukan.
Tentukan perangkat seluler yang dikenal
Untuk mengaktifkan emulasi perangkat dengan perangkat tertentu, "mobileEmulation" harus berisi "deviceName." Gunakan nama perangkat yang valid dari setelan Perangkat Emulasi DevTools sebagai nilai untuk "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())
Menentukan atribut perangkat individual
Anda dapat mengaktifkan Emulasi Seluler dengan menentukan masing-masing atribut. Tujuan
"mobileEmulation" (Emulasi seluler) kamus dapat berisi deviceMetrics
, clientHints
kamus, dan string userAgent
.
Metrik perangkat berikut harus ditetapkan dalam "deviceMetrics" kamus:
- "width" - lebar dalam piksel layar perangkat
- "tinggi" - tinggi layar perangkat dalam {i>pixel<i}
- "pixelRatio" - rasio piksel perangkat
- "sentuh" - apakah akan mengemulasikan peristiwa sentuh. Nilai ini ditetapkan secara default ke true dan biasanya dapat dihilangkan.
- "seluler" - apakah browser harus berperilaku sebagai agen pengguna seluler (scrollbar overlay, memunculkan peristiwa orientasi, mengecilkan konten agar pas dengan area pandang, dll.). Nilai ini ditetapkan secara default ke true dan biasanya dapat dihilangkan.
"clientHints" kamus dapat memiliki entri berikut:
- "platform" - sistem operasi. Nilai ini dapat berupa nilai yang diketahui ("Android", "Chrome OS", "Chromium OS", "Fuchsia", "Linux", "macOS", "Windows"), yang sama persis dengan nilai yang ditampilkan oleh Chrome yang berjalan di platform tertentu, atau dapat berupa nilai yang ditentukan pengguna. Nilai ini bersifat wajib.
- "seluler" - apakah browser harus meminta versi resource seluler atau desktop. Biasanya Chrome yang berjalan di ponsel dengan Android menetapkan nilai ini ke true. Chrome pada perangkat Android tablet menetapkan nilai ini ke false. Chrome di perangkat desktop juga menetapkan nilai ini ke false. Anda dapat menggunakan informasi ini untuk menentukan emulasi yang realistis. Nilai ini bersifat wajib.
- Entri yang tersisa bersifat opsional dan dapat dihilangkan kecuali jika relevan untuk pengujian:
- "merek" - daftar pasangan merek / versi utama. Jika dihilangkan, browser akan menggunakan nilainya sendiri.
- "fullVersionList" - daftar pasangan merek / versi. Tindakan ini mengabaikan browser menggunakan nilainya sendiri.
- "platformVersion" - Versi OS. Default-nya adalah string kosong.
- "model" - model perangkat. Default-nya adalah string kosong.
- "arsitektur" - Arsitektur CPU. Nilai yang diketahui adalah "x86" dan "arm". Pengguna bebas memberikan nilai string apa pun. Default-nya adalah string kosong.
- "bitakan" - bitness platform. Nilai yang diketahui adalah "32" dan "64". Pengguna bebas memberikan nilai string apa pun. Default-nya adalah string kosong.
- "wow64" - emulasi windows 32 di windows 64. Nilai boolean yang secara default disetel ke salah (false).
ChromeDriver mampu menyimpulkan "userAgent" nilai dari "clientHints" di platform berikut: "Android", "Chrome OS", "Chromium OS", "Fuchsia", "Linux", "macOS", "Windows". Oleh karena itu, nilai ini dapat dihilangkan.
Jika "clientHints" kamus dihilangkan (mode lama) ChromeDriver melakukan yang terbaik untuk menyimpulkan "clientHints" dari "userAgent". Fitur ini tidak dapat diandalkan, karena ambiguitas internal dari "userAgent" format nilai.
Ponsel dan tablet yang tersedia di bawah panel Emulasi Seluler dapat dapat ditemukan di kode sumber DevTools.
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)
Contoh konfigurasi emulasi seluler lengkap:
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
}
}
Perbedaan antara emulasi seluler dan perangkat sungguhan
Menguji {i>website<i} di {i>desktop<i} dengan emulasi seluler sangat membantu, tetapi ini bukan replikasi pengujian yang sempurna pada perangkat yang sebenarnya. Ada beberapa perbedaan utama, antara lain:
- Perangkat seluler sering kali memiliki GPU yang berbeda, yang dapat menyebabkan perubahan performa yang signifikan.
- UI seluler tidak diemulasi (khususnya, menyembunyikan kolom URL akan memengaruhi tinggi halaman).
- Pop-up disambiguasi (tempat Anda memilih salah satu dari beberapa target sentuh) tidak didukung.
- Banyak API hardware (misalnya, peristiwa
orientationchange
) tidak tersedia.