# 10m。 Advanced WebDriver – 以无头模式运行测试

> 原文： [https://javabeginnerstutorial.com/selenium/10m-advanced-webdriver-running-tests-in-headless-mode/](https://javabeginnerstutorial.com/selenium/10m-advanced-webdriver-running-tests-in-headless-mode/)

I am sure you would have heard of headless by now because Google introduced headless option for their Chrome browser eons back (from version 59)! Firefox is not far behind. It can be run in headless mode too!! Let’s execute some automated selenium tests in Firefox, without Firefox! 😉 In other words, tests run in the background and there is no display (i.e. the browser UI is not displayed to the user). The code will be provided for the Chrome browser as well.

您脑海中可能会出现的第一个问题是，为什么我首先需要一个无头的浏览器？ 我收到你的来信。 不用担心 我有答案并且相信我，这些都是很好的答案。 因此，事不宜迟，以下是您无头的几个原因，

1.  如果您的目标是获得更好的**速度**和**性能**，那么别无所求！ 由于无需为每个测试都启动浏览器 UI，从而避免了加载 JavaScript，CSS 和呈现 HTML 所需的所有时间，因此测试运行速度更快。
2.  通常，在 **CI（连续集成）管道**中，它需要在没有实际 GUI 的服务器或 Linux OS 等系统上运行。 无头模式节省了一天！
3.  如果您所有的测试都运行了几个小时怎么办？ 在这种情况下，用户必须从字面上看屏幕，让系统执行其工作，直到所有测试占据整个屏幕为止。 相反，如果以无头模式执行，则用户可以在后台运行测试时继续执行其他任务。
4.  当脚本被开发并且稳定时，并不需要真正看到它们正在运行。 以更快的方式在无头模式下运行它们似乎很有意义。 借助日志，可以执行所需的调试。
5.  并行执行 – 无头可阻止打开多个浏览器，并让您执行多任务。
6.  无头模式也可以拍摄**截图**。 因此，一旦发生故障，便始终可以以所需的任何方式获取并存储快照。

但是，瞧！ 有时候无头可能不是很有用。 例如，

1.  在开发脚本时，在传统的浏览器中运行它们可以帮助我们直观地查看实际情况，从而使自动化的初始阶段的调试变得容易。
2.  当模拟应用的真实用户时
3.  可能无法捕获某些错误，例如图像崩溃或无法加载

话虽如此，让我们看一些工作代码！

Chrome 无头模式，

```java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class HelloWorld_ChromeHeadless {
	public static void main(String[] args) {
		// System property set up
		System.setProperty("webdriver.chrome.driver", "browser-drivers\\chromedriver.exe");
		// Add options to Google Chrome
		ChromeOptions options = new ChromeOptions();
		// Setting headless argument
		options.addArguments("--headless");
		// To test responsive websites
		options.addArguments("window-size=1400,600");
		// Create a new instance for the class ChromeDriver
		// that implements WebDriver interface
		WebDriver driver = new ChromeDriver(options);
		// Assign the URL to be invoked to a String variable
		String baseUrl = "https://www.google.com";
		// Open baseUrl in IE browser window
		driver.get(baseUrl);
		// Print messages to console
		System.out.println(driver.getTitle());
		System.out.println("Hello World!"); 	
		// Close the IE browser
		driver.quit();

	}
}
```

Firefox 在无头模式下，

```java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
public class HelloWorldFirefox_Headless {
	public static void main(String[] args) {
		//Selenium version 3 beta releases require system property set up
		System.setProperty("webdriver.gecko.driver", "browser-drivers\\geckodriver.exe");
		FirefoxOptions options = new FirefoxOptions();
		options.setHeadless(true);
		//Create a new instance for the class FirefoxDriver
		//that implements WebDriver interface
		WebDriver driver = new FirefoxDriver(options);
		//Assign the URL to be invoked to a String variable
		String baseUrl = "https://www.google.com";
		String pageTitle = "";
		String expectedTitle = "Google";
		//Open baseUrl in Firefox browser window
		driver.get(baseUrl);
		//Get the page title and assign to a String variable
		pageTitle = driver.getTitle();
		//Check if obtained page title matches with the expected title
		//and print the console output accordingly
		if(pageTitle.equals(expectedTitle)){
			System.out.println("Hello World! Result is as expected.");
		}else{
			System.out.println("Hello World! Assertion failed!");
		}
		//Close the Firefox browser
		driver.quit();
	}
}
```

### 执行结果：

为每行代码提供了注释，使其易于说明。

控制台窗口显示没有任何错误。 它还显示测试以无头模式运行，并且所有消息均按预期方式打印。

<figure class="wp-block-image">![](img/4a30c4df52d170bc53a065f3b53b87dd.png)

<figcaption>Eclipse console output – Firefox in headless mode</figcaption>

</figure>

尝试今天的技能，祝您好运。 我坚信这些在您的自动化旅程中的某些时候会很有用。

祝你有美好的一天！

###### 下一篇文章