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


如果是这样,怎么办?
此外,这样做有什么好处?
由于浏览器未打开,您是否还需要在代码中保留等待(线程等待和隐式等待)?


评论

相关:sqa.stackexchange.com/questions/2538/…

您可以使用无头浏览器。如PhantomJS,HtmlUnitDriver等。

#1 楼

一种选择是HTMLUnit,它没有头,但是具有自己的专有JavaScript呈现引擎,因此它的行为可能与现有浏览器不同(如果您使用HTMLUnit,请不要忘记在实例化时启用JavaScript)。 br />
第二个选择是使用XVFB;这将在虚拟帧缓冲区环境中运行测试。在Selenium用户邮件列表和Selenium博客上已经多次报道了此消息,有关某些XVFB实现,请参见此帖子。

直接链接到教程:



functional-headless-ui-testing-django-selenium
观看player_embedded

如果您搜索Selenium和XVFB,则会发现更多信息。 br />

评论


看起来其中一些链接断开了

– MacGyver
13年11月11日在2:01

主站点:wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins

– MacGyver
13年3月11日在2:14

XVFB:wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin

– MacGyver
13年11月11日在2:17

#2 楼

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

driver = webdriver.Firefox()


至:

driver = webdriver.PhantomJS()


其余的代码不会需要更改,并且不会打开任何浏览器。为了进行调试,请在代码的不同步骤使用driver.save_screenshot('screen.png')

评论


Chrome测试是否一样?

–有人
16年1月15日在18:20

但是,如果您使用JavaScript,则可能会遇到问题。如果您使用的是Chrome,则可能会出现跨浏览器脚本问题。 @nexoma的答案可能解决了这个问题,但不确定使用无头chrome的javascript处理什么。

–迈克尔·杜兰特(Michael Durrant)
17年5月29日在18:10

我相信PhantomJS的名称中带有JS是有原因的;它可以完美地处理Javascript-不确定为什么在这里提到Chrome

–StéphaneBruckert
17年5月29日在18:22



#3 楼

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

好消息是,您可以简单地使用Chrome。 Chrome本身具有无需实际浏览器窗口即可运行的功能。

因此,实例化chrome驱动程序后,您只需添加说明即可无头工作。 br />


#4 楼

您可以尝试在HtmlUnitDriver实例中运行测试。我试图查看有关此文档,但是最新版本中的chm文件似乎已被破坏。

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

评论


提醒:如果您使用HtmlUnitDriver,则不能保证相同的测试将在实际的浏览器中实际运行。

–user246
2012年2月8日在18:46

我今天在WebDriver Wiki上读到,HTMLUnitDriver仅适用于Java客户端驱动程序,因此由于我们使用C#客户端驱动程序,因此我将无法使用此方法。 :-\但我感谢您的投入!

– MacGyver
2012年2月9日在16:21



#5 楼

您可以使用HTMLUnitDriver来运行测试,HTMLUnitDriver是大多数Webdriver中最快,最轻巧的

评论


我们使用C#驱动程序和NUnit,所以我不得不用Java重新编写所有内容,不是吗?

– MacGyver
2012年2月9日在16:19

语法因语言而异,但是您要测试的逻辑保持不变

–saikrishna
2012年2月13日在7:22

@MacGyver:不,您不必切换语言,可以将HTMLUnit视为启动的浏览器,而不是测试框架。对您来说,用哪种语言编写都无所谓,就像对Firefox等无关紧要。至少,您始终可以启动selenium服务器并使用webdriver绑定连接到它,并指定要使用HTMLUnit。在C#中:IWebDriver驱动器=新的RemoteWebDriver(DesiredCapabilities.HtmlUnit()); C#绑定中可能还会有一个HTMLUnitDriver(用于直接连接),因为C#属于四种官方支持的语言。

–zpea
2012年7月11日18:47



#6 楼

只需使用以下代码将您当前选择的浏览器作为无头浏览器运行,无头浏览器意味着您在运行代码时将不会打开浏览器。

    from selenium.webdriver.chrome.options import Options
    options = Options()
    options.add_argument("--headless")
    self.driver = webdriver.Chrome(options=options)


#7 楼

或者,

我们需要至少导入以下软件包: br />
然后像往常一样继续执行您的任务。