WebDriver驅動介紹
因為移動端的driver目前沒有接觸,所以主要介紹PC端driver,PC端的driver都是基於瀏覽器的,主要分為2種類型:
- 一種是真實的瀏覽器driver:safari、firefox、ie、chrome等
比如:safari、firefox、ie、chrome都是通過瀏覽器原生組件來調用瀏覽器的原生API,這些driver都是直接啟動並通過調用瀏覽器的底層接口來驅動瀏覽器的,因此具有最真實的用戶場景模擬,主要用於進行web的兼容性測試使用。
- 一種是偽瀏覽器driver:htmlunit、PhantomJS
selenium支持的偽瀏覽器包括htmlunit、PhantomJS;他們都不是真正的在瀏覽器運行、都沒有GUI而是具有支持html、js 等解析能力的類瀏覽器程序;
這些程序不會渲染出網頁的顯示內容,但是支持頁面元素的查找、JS的執行等;由於不進行css及GUI渲染,所以運行效率上會 比真實瀏覽器要快很多,主要用在功能性測試上面。
驅動 | 說明 |
Firefox Driver | 包含在各語言的 selenium(WebDriver) 包里, 這也是為什么安裝完 selenium 就可以直接使用 firefox 啟動腳本的原因。 |
Chrome Driver | 需要下載 chromedriver ,因為webdriver 原本是谷歌的項目,之后與selenium 合並,所以對 chrome的支持也非常好 |
IE Driver | 需要下載 IEDriverServer。 |
Opera Driver | 要下載operaDriver,OperaDriver 是WebDriver 廠商Opera Software 和志願者開發了對於Opera的WebDriver 實現 |
HtmlUnit Driver | htmlunit是java實現的類瀏覽器程序,它將返回文檔模擬成HTML, 從而模擬瀏覽器的運行, 但又非真正的去啟動一款瀏覽器去執行腳本包含在selenium server中,無需驅動,直接實例化即可 |
PhantomJS Driver | PhantomJS 是一個擁有JavaScript API 的無界面WebKit , 可以被看作一個款無界面的瀏覽器。PhantomJS是第三方的一個獨立類瀏覽器應用,可以支持html、js、css等執行 |
Appium | Appium 可以被看作移動端的Selenium ,它同樣支持多平台(iOS、Android及FirefoxOS ) 的app 及移動端web 的自動化測試 |
下面主要介紹兩種偽瀏覽器的簡單調用方法和對比,后續會單獨介紹Firefox和Ie瀏覽器調用的詳細內容及各類問題解決方法。
HTMLunit調用
HtmlUnit 官方網站:http://htmlunit.sourceforge.net/
本文采用本地的API查看地址來測試,可參考:前面的Selenium Python瀏覽器調用:Firefox文章中“如何查看python selenium的API來開啟地址
方法一:
#coding=utf-8 from selenium import webdriver from time import ctime from time import sleep from selenium.webdriver.common.desired_capabilities import DesiredCapabilities print ctime() driver=webdriver.Remote(command_executor="http://127.0.0.1:5555/wd/hub",desired_capabilities=DesiredCapabilities.HTMLUNIT) driver.get("http://127.0.0.1:4567") driver.find_element_by_partial_link_text("selenium").click() print driver.title print driver.current_url print driver.name print ctime() driver.close()
方法二:
#coding=utf-8 from selenium import webdriver from time import ctime from time import sleep print ctime() driver = webdriver.Remote( command_executor=' http://127.0.0.1:5555/wd/hub', desired_capabilities={'platform': 'ANY', 'browserName': 'htmlunit', 'version': '', 'javascriptEnabled': True }) driver.get("http://127.0.0.1:4567") driver.find_element_by_partial_link_text("selenium").click() print driver.title print driver.current_url print driver.name print ctime() driver.close()
二者的運行結果如下圖,因為測試過程無界面,所以打印時間,以及頁面title和url來判斷執行結果:
Wed Oct 14 17:29:22 2015
Python: package selenium
http://127.0.0.1:4567/selenium.html
htmlunit
Wed Oct 14 17:29:22 2015
運行前需要啟動selenium server,啟動方法如下:
1、C:\Users\admin>java -jar selenium-server-standalone-2.45.0.jar -role hub
2、C:\Users\admin>java -jar selenium-server-standalone-2.45.0.jar node -port 5555 -hub http://127.0.0.1:4444/grid/register
PhantomJS 調用
PhantomJS 官方網站:http://phantomjs.org/
在使PhantomJS 之前,需要先下載。PhantomJS 支持Windwos、MAC、Linux 等平台,我們可以根據自己的環境選擇相應的版本進行下載,下載完成解壓會得phantomjs-2.0.0-windows 目錄,在bin 目錄會看到phantomjs.exe 程序,將當前目錄添加到系統環境變量path 下。(或直接將phantomjs.exe 丟到Python 的安裝目錄下,因為我們最開始已將Python 添加到了系統環境變量的path 下)。
下面就可以使用phantomjs 驅動進行測試了。
#coding=utf-8 from selenium import webdriver from time import ctime from time import sleep print ctime() driver=webdriver.PhantomJS(executable_path="c:\\python27\\phantomjs.exe") driver.get("http://127.0.0.1:4567") driver.find_element_by_partial_link_text("selenium").click() print driver.title print driver.current_url print driver.name driver.get_screenshot_as_file("c:\\photo.jpg") print ctime() driver.close()
運行結果如下,另外在C盤下可以看到截取的圖片,與實際操作的界面相符:
Wed Oct 14 17:29:50 2015 Python: package selenium http://127.0.0.1:4567/selenium.html phantomjs Wed Oct 14 17:29:53 2015
瀏覽器對比
下面在HTMLunit、PhantomJS和Firefox中運行同一個腳本(使用上文中HTMLunit的演示腳本)
三者的時間分別為:HTMLunit:0s,PhantomJS:3s,Firefox:8s
下面對比一下各個瀏覽器的優缺點:
驅動類型 | 優點 | 缺點 | 應用 |
真實的瀏覽器驅動 | 真實模擬用戶行為 | 運行效率、穩定性低 | web的兼容性測試使用 |
HtmlUnit | 運行速度快 | js 引擎非主流的瀏覽器支持 | 包含少量 js 的頁面測試 |
PhantomJS | 運行速度快、 模擬行為接近真實瀏覽器 | 不能模擬特定瀏覽器的行為 | 非GUI的功能性測試 |
參考資料
[1],selenium webdriver的各種driver,