Running Selenium Tests With Chrome Headless
Learn how to use Java to execute tests in a headless Google Chrome browser and make testing your web applications a little easier.
Join the DZone community and get the full member experience.
Join For FreeIntroduction
Before Google Chrome 59, headless execution had to be done by third-party headless browsers like PhantomJS, SlimerJS, TrifleJS, Nightmare, and HTMLUnit.
The "problem" is that these headless browsers emulate some engines, but not V8 (the Chrome engine).
Headless Browser | Engine |
PhantomJS | QtWebKit |
SlimerJS | Gecko (Firefox) |
TrifleJS | Trident (IE) |
Nightmare | Electron |
When we talk about testing, it's necessary to simulate Google's real engine, as both Internet users and web devs tend toward using Google Chrome.
How to Do it With Java
As Google Chrome ships with headless execution in version 59 (as you can see here) we can tell ChromeDriver the options before the execution.
In the code below I added two options through ChromeOptions: headless and the window-size.
// imports omitted
public class ChromeHeadlessTest {
@Test
public void testExecution() throws IOException {
System.setProperty("webdriver.chrome.driver", "<chromedrier_path>");
// Add options to Google Chrome. The window-size is important for responsive sites
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1200x600");
WebDriver driver = new ChromeDriver(options);
driver.get("http://seleniumhq.org");
// a guarantee that the test was really executed
assertTrue(driver.findElement(By.id("q")).isDisplayed());
driver.quit();
}
}
The headless option will tell to Google Chrome to execute in headless mode. The window-size is a way to control the responsiveness (and allows your site be displayed, like a mobile site, if you have not set a window size).
You can see some other ways to inform the ChromeOptions here.
Published at DZone with permission of Elias Nogueira. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments