我们正在选择我们的无头浏览器驱动程序解决方案,这将是Selenium WebDriver的一些实现。 有GhostDriver,其中一端使用后端PhantomJS,另一端使用基于HtmlUnitDriver的HtmlUnit。
PhantomJS使用Safari的渲染引擎WebKit来渲染页面,而HtmlUnitDriver则使用其他浏览器无法使用的Rhino引擎(它只是模拟"浏览器行为。最后一个事实被考虑作为骗局,因为渲染行为可能与流行的浏览器有很大不同。
我们认为,PhantomJS是一个更强大的候选人。但是,我们并不了解一切:)我们的决定是否还需要考虑其他因素和权衡取舍? HtmlUnitDriver可以成为更好的解决方案的其他场景?
答案 0 :(得分:23)
根据我对许多无头浏览器的经验,我会说:
HtmlUnitDriver :我遇到的所有实现中最快的,非常适合简单的静态页面,尤其是那些没有JavaScript的页面。任何远程复杂的页面似乎都会产生问题 - 这是我的实践经验,即使我无法详细证明。非常适合在演示页面上测试Selenium功能,抓取状态页面等。
PhantomJSDriver (PhantomJS + GhostDriver):与桌面浏览器相比,没有你想象的那么快,但是,设置比Firefox + xvfb更容易。默认情况下,屏幕截图看起来有点奇怪,但通常证明是因为PhantomJS默认为窄窗口,除非明确设置(请参阅下面的原因)。
更新:有关PhantomJS版本的详细信息,来自my other answer。
与Safari一样,PhantomJS使用WebKit进行渲染(例如Firefox使用Gecko)
针对不同的WebKit版本构建了不同的PhantomJS版本。 PhantomJS 2.x uses WebKit 538.x,使其成为equivalent to Safari 7 or 8。而PhantomJS 1.9.8 uses WebKit 534.34,相当于Safari 5。
这可能是一个问题,因为Google将Safari 5确定为“旧”浏览器,因此可能会render its search pages differently。
因此,确保使用PhantomJS 2.x可以减少很多人报告的与桌面浏览器的渲染差异。
另一个有趣的可能性是SlimerJS。但是,我还没有足够可靠地工作。
我从未遇到过HtmlUnitDriver或PhantomJSDriver的可靠性问题(唯一令人烦恼的是HttpClient 4.5 / HtmlUnit 2.17 incompatibility issue)。
(在回答有关修改HTTP请求的评论时,我个人建议坚持使用WebDriver API并使用像BrowserMob这样的代理来改变请求和响应,而不是利用特定于浏览器的功能。)
总而言之,我建议不要创建强制用户选择一个浏览器而不是另一个浏览器的工具或流程。如果可能,请允许他们配置或覆盖。对于大多数情况我都会为PhantomJS做好准备,因为它不会让你失望。但是,对于最简单的页面,应考虑HtmlUnit的性能。
另请参阅(可能):http://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html和https://www.quora.com/Software-Testing/How-does-PhantomJS-compare-to-Selenium
答案 1 :(得分:3)
在过去的几年里,我在一些项目中使用过phantomJS,但经常遇到问题。例如,页面上的javascript与chrome,firefox,Internet Explorer的行为不同。有些页面根本没有加载,可能是由于重定向,但我不是正面的(例如,键盘登录页面)。
我没有尽可能多地使用HtmlUnit,但是当我输入它时,它会在使用keycloak登录页面进行测试时避免上述一些幻像问题。
答案 2 :(得分:0)
PhantomJS开发具有been suspended as of March 3rd 2018,而无头模式已添加到Chrome和Firefox