selenium2支持通過各種driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驅動真實瀏覽器完成測試。
除此之外,selenium也是支持無界面瀏覽器操作的。比如說HtmlUnit和PhantomJs。他們都不是真正的瀏覽器,運行時不會渲染頁面顯示內容,但是支持頁面元素查找,js的執行等;由於不進行css和gui渲染,運行效率要比真實的瀏覽器要快很多。
1.htmlUnit是java實現的類瀏覽器程序,包含在selenium server中,無須驅動,直接實例化就行。
用法如下:
WebDriver driver = new HtmlUnitDriver();//
HtmlUnitDriver driver = new HtmlUnitDriver(true);//支持js(實際還是支持的不夠好,因為htmlUnit使用的js引擎(Rhinojs)不是主流的瀏覽器支持的)
2.PhantomJS 是一個基於 WebKit(WebKit是一個開源的瀏覽器引擎,Chrome,Safari就是用的這個瀏覽器引擎) 的服務器端JavaScript API,主要應用場景是:無需瀏覽器的 Web 測試,頁面訪問自動化,屏幕捕獲,網絡監控
用法如下:
PhantomJS driver = new PhantomJSDriver();
3.為了看以上兩個無界面瀏覽器是否適合當前項目組前端自動化,做了一些預研,結果如下:
行為描述 | 行為 | HtmlUnitDriver | HtmlUnitDriver(true) | PhantomJSDriver | FirefoxDriver |
文本框input | 輸入文本 | yes | yes | yes | yes |
按鈕button | 點擊按鈕 | yes | yes | yes | yes |
下拉列表select | 選擇選項 | yes | yes | yes | yes |
復選框checkbox | 點擊 | yes | yes | yes | yes |
Alert(顯示帶有一條指定消息和一個 OK 按鈕的警告框) | 點擊 | no | no | no | yes |
Promprt(顯示可提示用戶進行輸入的對話框) | 點擊 | no | no | no | yes |
最終的預研結果是這兩者不適合我們的系統,因為我們的系統中有很多Alert,只能忍痛放棄
4.總結HtmlUnitDriver,PhantomJS與真實瀏覽器driver的優缺點比較
driver類型 | 優點 | 缺點 | 應用 |
真實瀏覽器driver | 真實模擬用戶行為 | 效率、穩定性低 | 瀏覽器兼容性測試 |
HtmlUnit | 速度快 | js引擎(Rhinojs)不是主流的瀏覽器支持的,故對js支持的不夠好 | 包含少量js的頁面測試 |
PhantomJS | 速度中等、模擬行為接近真實 | 不能模擬不同/特定瀏覽器的行為 | 非GUI的功能性測試 |
總結:
如果你要測試的頁面js不是很多,並且不需要做兼容性測試的話,HtmlUnitDriver無遺是最好的選擇
如果你需要做兼容性測試的話,還是應該選擇真實的瀏覽器driver(如果你想提高自動化運行速率,可以考慮用testng,selenium grid並行測試)