10M 高级 WebDriver – 以无头模式运行测试

原文: https://javabeginnerstutorial.com/selenium/10m-advanced-webdriver-running-tests-in-headless-mode/

我敢肯定,您现在会听说无头,因为 Google 为其 Chrome 浏览器(从 59 版开始)引入了无头选项! Firefox 紧随其后。 它也可以在无头模式下运行!! 让我们在没有 Firefox 的情况下在 Firefox 中执行一些自动化的 Selenium 测试! 😉换句话说,测试在后台运行,并且没有显示(即,浏览器 UI 不显示给用户)。 该代码还将提供给 Chrome 浏览器。

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

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

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

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

话虽如此,让我们看一些工作代码!

Chrome 无头模式,

  1. import org.openqa.selenium.WebDriver;
  2. import org.openqa.selenium.chrome.ChromeDriver;
  3. import org.openqa.selenium.chrome.ChromeOptions;
  4. public class HelloWorld_ChromeHeadless {
  5. public static void main(String[] args) {
  6. // System property set up
  7. System.setProperty("webdriver.chrome.driver", "browser-drivers\\chromedriver.exe");
  8. // Add options to Google Chrome
  9. ChromeOptions options = new ChromeOptions();
  10. // Setting headless argument
  11. options.addArguments("--headless");
  12. // To test responsive websites
  13. options.addArguments("window-size=1400,600");
  14. // Create a new instance for the class ChromeDriver
  15. // that implements WebDriver interface
  16. WebDriver driver = new ChromeDriver(options);
  17. // Assign the URL to be invoked to a String variable
  18. String baseUrl = "https://www.google.com";
  19. // Open baseUrl in IE browser window
  20. driver.get(baseUrl);
  21. // Print messages to console
  22. System.out.println(driver.getTitle());
  23. System.out.println("Hello World!");
  24. // Close the IE browser
  25. driver.quit();
  26. }
  27. }

Firefox 在无头模式下,

  1. import org.openqa.selenium.WebDriver;
  2. import org.openqa.selenium.firefox.FirefoxDriver;
  3. import org.openqa.selenium.firefox.FirefoxOptions;
  4. public class HelloWorldFirefox_Headless {
  5. public static void main(String[] args) {
  6. //Selenium version 3 beta releases require system property set up
  7. System.setProperty("webdriver.gecko.driver", "browser-drivers\\geckodriver.exe");
  8. FirefoxOptions options = new FirefoxOptions();
  9. options.setHeadless(true);
  10. //Create a new instance for the class FirefoxDriver
  11. //that implements WebDriver interface
  12. WebDriver driver = new FirefoxDriver(options);
  13. //Assign the URL to be invoked to a String variable
  14. String baseUrl = "https://www.google.com";
  15. String pageTitle = "";
  16. String expectedTitle = "Google";
  17. //Open baseUrl in Firefox browser window
  18. driver.get(baseUrl);
  19. //Get the page title and assign to a String variable
  20. pageTitle = driver.getTitle();
  21. //Check if obtained page title matches with the expected title
  22. //and print the console output accordingly
  23. if(pageTitle.equals(expectedTitle)){
  24. System.out.println("Hello World! Result is as expected.");
  25. }else{
  26. System.out.println("Hello World! Assertion failed!");
  27. }
  28. //Close the Firefox browser
  29. driver.quit();
  30. }
  31. }

执行结果:

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

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

![](img/4a30c4df52d170bc53a065f3b53b87dd.png) Eclipse console output – Firefox in headless mode

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

祝你有美好的一天!

下一篇文章