How to use chrome headless using selenium
A headless browser is a kind of web browser which has no user interface, In other words, a browser, that access web pages but doesn’t show them to any human being. They’re actually used to provide the content of web pages to other programs.
Why is that useful?
A headless browser is a great tool for automated testing and server environments where you don't need a visible UI shell. For example, you may want to run some tests against a real web page, create a PDF of it, or just inspect how the browser renders an URL.
Now Chrome also supports headless feature from version 59 .
Right now, Selenium opens a full instance of Chrome. In other words, it's an automated solution but not completely headless. However, Selenium could use --headless in the future.
There are few bugs in new chrome driver so we need to use 2 chromeOptions to use headless Chrome in selenium
Here is code for chrome headless in windows system
import org.junit.Assert;
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;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
public class HeadlessChrome
{
@Test
public void createChromeDriverHeadless() throws IOException
{
ChromeOptions chromeOptions = new ChromeOptions();
System.setProperty("webdriver.chrome.driver", "C:\\Users\\anjan\\Desktop\\cucmber\\chromedriver_win32\\chromedriver.exe");
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("--disable-gpu");
WebDriver Driver = new ChromeDriver(chromeOptions);
Driver.navigate().to("https://www.facebook.com");
WebDriverWait waitForUsername = new WebDriverWait(Driver, 5000);
waitForUsername.until(ExpectedConditions.visibilityOfElementLocated(By.id("email")));
Driver.findElement(By.id("email")).sendKeys("tomsmith");
Driver.findElement(By.id("loginbutton")).click();
WebDriverWait waitForError = new WebDriverWait(Driver, 5000);
waitForError.until(ExpectedConditions.visibilityOfElementLocated(By.id("email")));
Assert.assertTrue(Driver.findElement(By.id("loginbutton")).getText().contains("Log In"));
Driver.quit();
}
}