在不打开实际浏览器窗口的情况下运行 WebDriver

软件测试 硒2 网络驱动程序
2022-01-11 14:25:13

我听说 Selenium WebDriver 可以在不打开真正的浏览器窗口的情况下运行,这意味着它在后台运行。我在自动化测试中使用 C# 客户端驱动程序、FirefoxDriver,并使用 NUnit 启动一个类库项目(包含我的代码)。

  • 如果是这样,如何做到这一点?
  • 另外,这样做有什么好处?
  • 由于浏览器未打开,您是否仍需要在代码中保留等待(thread.sleep 和隐式等待)?
4个回答

一种选择是 HTMLUnit,它是无头的,但有自己的专有 JavaScript 渲染引擎,因此它的行为可能与现有浏览器不同(如果您确实使用 HTMLUnit,请不要忘记在实例化它时启用 JavaScript)。

第二种选择是使用 XVFB;这将在虚拟帧缓冲区环境中运行测试。这已经在 Selenium 用户邮件列表和 Selenium 博客上报告了很多次,请参阅这篇文章了解一些 XVFB 实现。

直接链接到教程:

  1. 功能-headless-ui-testing-django-selenium
  2. 观看 player_embedded

如果你用谷歌搜索 Selenium 和 XVFB,你会发现更多信息。

在没有 XVFB 的情况下隐藏浏览器非常容易。只需安装 PhantomJS然后,更改此行:

driver = webdriver.Firefox()

到:

driver = webdriver.PhantomJS()

您的其余代码无需更改,也不会打开任何浏览器。出于调试目的,driver.save_screenshot('screen.png')请在代码的不同步骤中使用。

您曾经可以为此使用 PhantomJS,但由于 PhantomJS 本身已停产,因此 Selenium PhantomJS 驱动程序也已停产。

好消息是,您可以简单地使用 Chrome。Chrome 本身已经获得了能够在没有实际浏览器窗口的情况下运行的功能。

因此,在实例化您的 chrome 驱动程序后,您可以简单地添加指令以无头工作

options = webdriver.ChromeOptions();
options.add_argument('headless');
options.add_argument('window-size=1200x600'); // optional

资源

您可以尝试在 HtmlUnitDriver 的实例中运行您的测试。我试图查看这方面的文档,但最新版本中的 chm 文件似乎很糟糕。

还有WebkitDriver,但这似乎只是暂时的 Java。