我听说 Selenium WebDriver 可以在不打开真正的浏览器窗口的情况下运行,这意味着它在后台运行。我在自动化测试中使用 C# 客户端驱动程序、FirefoxDriver,并使用 NUnit 启动一个类库项目(包含我的代码)。
- 如果是这样,如何做到这一点?
- 另外,这样做有什么好处?
- 由于浏览器未打开,您是否仍需要在代码中保留等待(thread.sleep 和隐式等待)?
我听说 Selenium WebDriver 可以在不打开真正的浏览器窗口的情况下运行,这意味着它在后台运行。我在自动化测试中使用 C# 客户端驱动程序、FirefoxDriver,并使用 NUnit 启动一个类库项目(包含我的代码)。
一种选择是 HTMLUnit,它是无头的,但有自己的专有 JavaScript 渲染引擎,因此它的行为可能与现有浏览器不同(如果您确实使用 HTMLUnit,请不要忘记在实例化它时启用 JavaScript)。
第二种选择是使用 XVFB;这将在虚拟帧缓冲区环境中运行测试。这已经在 Selenium 用户邮件列表和 Selenium 博客上报告了很多次,请参阅这篇文章了解一些 XVFB 实现。
直接链接到教程:
如果你用谷歌搜索 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。