Headless Browser Testing – Selenium WebDriver
Headless browser testing is simply testing a web pages functionality, without a GUI present. There are various different browsers we could use for this, including:
- Chrome
- Firefox
- PhantomJS
- HtmlUnit
PhantomJS is the only driver that must be downloaded separately, the other three, come bundled in with their corresponding driver servers, or with Selenium as a whole.
Chrome Headless Browser
To test against Chromes built-in headless browser, we can use:
package headlesstests; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class ChromeHeadless { WebDriver driver; @Before public void setUp() throws Exception { //Instantiating ChromeOptions object ChromeOptions options = new ChromeOptions(); //Adding "headless" argument to options options.addArguments("headless"); //Passing the options into the ChromeDriver driver = new ChromeDriver(options); driver.get("https://www.edgewordstraining.co.uk/webdriver2/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @After public void tearDown() throws Exception { driver.quit(); } @Test public void test() { System.out.println("Title of the page is -> " + driver.getTitle()); driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.id("username")).click(); driver.findElement(By.id("password")).click(); driver.findElement(By.partialLinkText("Sub")).click(); } }
Firefox Headless Browser
To test against Firefox’x built-in headless browser, we can use:
package headlesstests; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; public class FirefoxHeadless { WebDriver driver; @Before public void setUp() throws Exception { //Instantiating FirefoxOptions object FirefoxOptions options = new FirefoxOptions(); //Adding "--headless" argument to options options.addArguments("--headless"); //Passing the options into the FirefoxDriver driver = new FirefoxDriver(options); driver.get("https://www.edgewordstraining.co.uk/webdriver2/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @After public void tearDown() throws Exception { driver.quit(); } @Test public void test() { System.out.println("Title of the page is -> " + driver.getTitle()); driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.id("username")).click(); driver.findElement(By.id("password")).click(); driver.findElement(By.partialLinkText("Sub")).click(); } }
PhantomJS Headless Browser
To test against PhantomJS headless browser, does require the PhantomJS driver, which can be downloaded from: http://phantomjs.org/
You can then use:
package headlesstests; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; public class PhantomJSHeadless { WebDriver driver; @Before public void setUp() throws Exception { //Instantiate PhantomJSDriver driver = new PhantomJSDriver(); driver.get("https://www.edgewordstraining.co.uk/webdriver2/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @After public void tearDown() throws Exception { driver.quit(); } @Test public void test() { System.out.println("Title of the page is -> " + driver.getTitle()); driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.id("username")).click(); driver.findElement(By.id("password")).click(); driver.findElement(By.partialLinkText("Sub")).click(); } }
HtmlUnit Headless Browser
To test against Selenium’s built-in headless browser, we can use:
package headlesstests; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class HtmlUnitHeadless { HtmlUnitDriver driver = new HtmlUnitDriver(true); @Before public void setUp() throws Exception { driver.get("https://www.edgewordstraining.co.uk/webdriver2/"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @After public void tearDown() throws Exception { driver.quit(); } @Test public void test() { System.out.println("Title of the page is -> " + driver.getTitle()); driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.id("username")).click(); driver.findElement(By.id("password")).click(); driver.findElement(By.partialLinkText("Sub")).click(); } }
For more information regarding Selenium WebDriver, please see our: