8

显然,这个问题的答案取决于许多环境因素。

总的来说我想知道人们的经验是什么HtmlUnitDriver作为一种可靠的工具,可以“信任”以基本上与其他浏览器相同的方式浏览网站。

当然,我意识到“其他浏览器的做法”非常模糊。自然每个浏览器都会有它的怪癖。但是我在一个项目中,我们有数百个验收测试场景(用JBehave编写)并且使用FirefoxDriverandInternetExplorerDriver运行所有这些场景需要两个多小时,从持续集成的角度来看,这有点粗糙。所以我想知道我们是否可以将我们的验收测试切换到使用HtmlUnitDriver并期望更快的时间以几乎相同的行为(也许我们可以预期少数测试会失败使用HtmlUnitDriver并专门运行这些测试)基于浏览器的驱动程序)。

我们的 UI 使用GWT,这可能会使事情复杂化,也可能不会(我不知道)。

基本上,根据其他人的经验,它的HtmlUnitDriver操作与其他浏览器一样好,还是它真的只适用于带有最少 JavaScript 的非常简单的 HTML 网站,不应该用于企业 Web 应用程序?

4

1 回答 1

8

根据我使用 HtmlUnitDriver 的经验,我会说,如果您在编写测试时不将其用作基准浏览器,那么将它们转换为使用它会成为一场噩梦。对于 javascript 繁重的网站尤其如此。

主要原因是 htmlunit 的明显底层使用,默认情况下,它使用 Rhino javascript 引擎。在过去,我总是必须指定 HtmlUnitDriver 使用 Firefox 的 javascript 引擎启动 htmlunit。这在很大程度上解决了我在使用 HtmlUnitDriver 运行测试时发现的 javascript 问题。

在为每个浏览器使用相同的测试代码时,我面临的最大问题之一是,在被测站点上,UI 开发人员是否已将 javascript 事件分配onClick()给 html 元素,例如<span>.

这样做的原因是,如果您要.click()在表示 的 WebElement 上使用 WebDriver 的方法<span>,那么 htmlunit 将不会做任何事情(它希望onClick()在诸如 an 的元素上调用 an <input>)。为了解决这个问题,我不得不click()在 javascript 中手动调用一个事件。您可以使用 WebDriver 的 JavascriptExecutor 或使用 WebDriverBackedSelenium 和 Selenium 的.fireEvent() method.

因此,如果您的网站使用此类事件,那么我会说切换到使用 HtmlUnitDriver 可能是一项艰巨的任务。

尽管如此,我实际上在所有测试中都使用了 HtmlUnitDriver。然而,不久前我经历了发现上述所有内容的痛苦,所以现在在编写测试时使用 HtmlUnitDriver 作为我的基线浏览器。

于 2011-03-27T18:53:20.767 回答