显然,问题的答案取决于许多环境因素。
在 general 中,我想知道人们使用HtmlUnitDriver
作为可靠工具的经验是什么,可以“信任”导航网站,基本上与其他浏览器一样。< / p>
当然,我意识到“其他浏览器的做法”非常模糊;自然每个浏览器都会有它的怪癖。但我正处于一个项目中,我们有数百个验收测试场景(用JBehave编写)并使用FirefoxDriver
和InternetExplorerDriver
,所有这些都需要两个多小时,这就是从持续整合的角度看粗糙。所以我想知道它是否至少可行我们可以将我们的验收测试转换为使用HtmlUnitDriver
并期望更快的时间与 相同的行为(也许我们可以期望使用HtmlUnitDriver
进行一些测试失败,并使用基于浏览器的驱动程序专门运行这些测试。
我们的用户界面使用GWT,这可能会或可能不会使事情变得复杂(我不知道)。
基本上,在其他人的体验中,HtmlUnitDriver
是否与其他浏览器一样运作,或者它是否真的只适用于使用最少JavaScript的非常简单的HTML网站,不应该用于企业Web应用程序?< / p>
答案 0 :(得分:8)
根据我使用HtmlUnitDriver的经验,我会说如果你在编写测试时不使用它作为基线浏览器,那么将它们转换为使用它会变得有点噩梦。对于javascript繁重的网站来说尤其如此。
主要原因是htmlunit的明显底层使用,默认情况下使用Rhino javascript引擎。在过去,我总是必须指定HtmlUnitDriver使用Firefox的javascript引擎启动htmlunit。在大多数情况下,这解决了我在使用HtmlUnitDriver运行测试时发现的javascript问题。
在为每个浏览器使用相同的测试代码时,我遇到的最大问题之一是,在测试的网站上,UI开发人员已将onClick()
等javascript事件分配给html元素,例如<span>
。
原因是如果你在表示.click()
的WebElement上使用WebDriver的<span>
方法,那么htmlunit将不会做任何事情(它希望调用onClick()
关于诸如<input>
)之类的元素。
为了解决这个问题,我不得不在javascript中手动调用click()
事件。您可以使用WebDriver的JavascriptExecutor或使用WebDriverBackedSelenium和Selenium的.fireEvent() method
来完成此操作。
因此,如果您的网站使用此类事件,那么我会说切换到使用HtmlUnitDriver可能是一项艰巨的任务。
尽管如此,我实际上使用HtmlUnitDriver进行所有测试。但是,我经历了发现上述所有内容的痛苦,所以现在在编写测试时使用HtmlUnitDriver作为我的基线浏览器。