Newest versions of Chromedriver breaks the user agent for device emulation via device name. In previous versions the user agent of the emulated device was set. In the newest versions the user agent differs from the emulated device.
- Version Chrome: 116.0.5845.110
- Version Chromedriver: 116.0.5845.96
- Bug: https://bugs.chromium.org/p/chromedriver/issues/detail?id=4550&q=userAgent&can=2 Show archive.org snapshot
- Setting: https://chromedriver.chromium.org/capabilities Show archive.org snapshot
In Capybara an affected config looks like following:
Capybara.register_driver :mobile_selenium do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_emulation(device_name: 'iPhone 6')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Running page.evaluate_script('navigator.userAgent')
has changed for Chromedriver version 116.0.5845.96
with the example above. The user agent is not set anymore.
Previous result: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1
Current result: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/116.0.5845.110 Safari/537.36
Temporary fix
You can configure your device manually with the configs from the Chromium
source code
Show archive.org snapshot
. It is not possible to use device_name
with the user_agent
option.
mobileEmulation: A dictionary with either a value for “deviceName,” or values for “deviceMetrics” and “userAgent.” Refer to Mobile Emulation for more information.
Source Show archive.org snapshot
options.add_emulation(
device_metrics: { width: 375, height: 667, touch: false, mobile: true },
user_agent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
)