2011-03-17 73 views
8

顯然,問題的答案取決於一些環境因素。HtmlUnitDriver的可靠性如何?

一般,我想知道是什麼人的經驗與HtmlUnitDriver作爲一個可靠的工具,它可以是「信任」來瀏覽網站基本相同的方式其他瀏覽器做。

當然,我意識到「其他瀏覽器的做法」非常模糊;自然每個瀏覽器都會有它的怪癖。但是我正在一個項目中,我們有數百個驗收測試場景(編寫於JBehave),並使用FirefoxDriverInternetExplorerDriver,運行它們都需要兩個多小時,這從持續集成的角度來看很粗糙。所以我想知道如果它至少可行,我們可以在切換我們的驗收測試使用HtmlUnitDriver和期待更快倍大多相同的行爲(也許我們可以期待的試驗了一把用HtmlUnitDriver失敗,特別是使用基於瀏覽器的驅動程序運行這些測試)。

我們的用戶界面使用GWT,這可能會或可能不會使事情複雜化(我不知道)。

基本上,在其他人的經驗中,HtmlUnitDriver的操作與其他瀏覽器一樣嗎?還是僅適用於使用JavaScript最簡單的非常簡單的HTML網站,而不應用於企業Web應用程序?

回答

8

從我使用HtmlUnitDriver的經驗來看,如果在編寫測試時不使用它作爲基線瀏覽器,那麼轉換它們以使用它會變得有點噩夢。當涉及到JavaScript大量網站時尤其如此。

這樣做的主要原因是htmlunit的明顯潛在用途,默認情況下,它使用Rhino javascript引擎。在過去,我一直必須指定HtmlUnitDriver使用Firefox的JavaScript引擎啓動htmlunit。這在很大程度上解決了我在使用HtmlUnitDriver運行測試時發現的JavaScript問題。

我在面對每個瀏覽器使用相同測試代碼時遇到的最大問題之一是,如果在被測站點上,UI開發人員已將諸如onClick()之類的javascript事件分配給html元素(如<span>)。

這樣做的原因是,如果你使用的webdriver的.click()方法上代表<span>一個WebElement,然後會的HtmlUnit沒有做任何事情(預計的onClick()要對元素稱爲如<input>)。 爲了解決這個問題,我不得不在javascript中手動調用click()事件。您可以使用WebDriver的JavascriptExecutor或使用WebDriverBackedSelenium和Selenium的.fireEvent() method來完成此操作。

因此,如果您的網站使用這樣的事件,那麼我會說切換使用HtmlUnitDriver可能是一個大任務。

儘管如此,我實際上使用HtmlUnitDriver進行所有測試。但是,我經歷了發現上述所有內容的痛苦,所以現在在編寫測試時使用HtmlUnitDriver作爲我的基線瀏覽器。