Hi all, in this post I will show how to change user agent for your test automation projects by using User-Agent Switcher add-on and selenium webdriver for Firefox and Chrome.
Changing User Agent for Firefox
1) First you should add User-Aget Switcher to your Firefox browser.
2) Save all device list to desktop and import it as shown below.

3) Go to Tools-> Default User Agent -> Edit User Agents

Then select Mobile Devices -> Devices -> HTC -> One M9 – Android 6.0 -Chrome 52.0 and then click Edit.

Then, you can see the user agent value of HTC One M9 as shown below. Copy and save these value for user agent manipulation in our selenium webdriver test automation code.

Test Scenario:
- Go to www.amazon.com
- Write “Sony Headphones” to the search bar.
- Click search button
- Wait until first search result’s image is visible
- Write first search element’s text to the console
Test Code:
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.net.MalformedURLException;
/**
* Created by onurb on 29-Nov-16.
*/
public class MobileWebTestFirefox {
private static WebDriver driver;
private WebDriverWait wait = new WebDriverWait(driver,10);
@BeforeClass
public static void setup () throws MalformedURLException {
//Declare Firefox Driver Location
String geckoDriverLocation = "C:\\Selenium\\drivers\\firefox\\geckodriver.exe";
System.out.println("Gecko Driver: " + geckoDriverLocation );
System.setProperty("webdriver.gecko.driver", geckoDriverLocation);
//Firefox Profile Settings
FirefoxProfile profile = new FirefoxProfile();
//******************************************************
// This is Optional For My Work Laptop Security Settings
//******************************************************
//Accept Untrusted Certificates
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(false);
//Use No Proxy Settings
profile.setPreference("network.proxy.type", 0);
//******************************************************
//******************************************************
//Change User Agent to HTC ONE M9
profile.setPreference("general.useragent.override", "Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36");
driver = new FirefoxDriver(profile);
}
@Test
public void mobileWebTestFirefox () throws InterruptedException {
//Go To Amazon.com
driver.navigate().to("http://www.amazon.com/");
//Get search bar and search button
WebElement searchBar = driver.findElement(By.id("nav-search-keywords"));
WebElement searchButton = driver.findElement(By.xpath("./*//*[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][@id='nav-search-form']/div[1]/div/input"));
//Write Sony Headphones to the search bar and click search button
searchBar.sendKeys("Sony Headphones");
searchButton.click();
//Wait until first element image is visible
wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id='resultItems']/li[1]/a/div/div[1]/div/img")));
//Get first element's text and write it to the console
String firstSearchElementText = driver.findElement(By.xpath(".//*[@id='resultItems']/li[1]/a/div/div[2]/h5")).getText();
System.out.println("First Search Element Name: " + firstSearchElementText);
}
@AfterClass
public static void quitDriver() {
driver.quit();
}
}
Changing User Agent for Chrome
1) First you should add User-Aget Switcher to your Chrome browser.
2) Go to User-Agent Switcher settings at Chrome extensions section and get desired agent’s information.
The test scenario is the same and the code is for Chrome browser is shown below.
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
* Created by onurb on 29-Nov-16.
*/
public class MobileWebTestChrome {
private static WebDriver driver;
private WebDriverWait wait = new WebDriverWait(driver,10);
@BeforeClass
public static void setup () {
//Chrome Driver Decleration
String chromeDriverLocation = "C:\\Selenium\\drivers\\chrome\\chromedriver.exe";
System.out.println("Chrome Driver: " + chromeDriverLocation );
System.setProperty("webdriver.chrome.driver", chromeDriverLocation);
//Chrome Options
ChromeOptions options = new ChromeOptions();
options.addArguments("--user-agent=Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36");
options.addArguments("--start-maximized");
driver = new ChromeDriver(options);
}
@Test
public void mobileWebTestChrome () throws InterruptedException {
//Go To Amazon.com
driver.navigate().to("http://www.amazon.com/");
//Get search bar and search button
WebElement searchBar = driver.findElement(By.id("nav-search-keywords"));
WebElement searchButton = driver.findElement(By.xpath("./*//*[@id='nav-search-form']/div[1]/div/input"));
//Write Sony Headphones to the search bar and click search button
searchBar.sendKeys("Sony Headphones");
searchButton.click();
//Wait until first element image is visible
wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id='resultItems']/li[1]/a/div/div[1]/div/img")));
//Get first element's text and write it to the console
String firstSearchElementText = driver.findElement(By.xpath(".//*[@id='resultItems']/li[1]/a/div/div[2]/h5")).getText();
System.out.println("First Search Element Name: " + firstSearchElementText);
}
@AfterClass
public static void quitDriver() {
driver.quit();
}
}
Github: https://github.com/swtestacademy/GridTests/tree/master/src/test/java/grid/MobileUserAgent
The end!
-Onur

Onur Baskirt is a Software Engineering Leader with international experience in world-class companies. Now, he is a Software Engineering Lead at Emirates Airlines in Dubai.


I have been trying to set the User Agent for Safari. I have not found a solution. Do you know if it is possible to pass User Agent configuration information to SafariDriver/Safari using Selenium?
I have never tried this and I got a thread which states that it is not supported. :(
https://stackoverflow.com/questions/26927918/set-useragent-when-running-selenium-mobile-tests-with-safaridriver