Selenium webdriver的各種driver
selenium可支持的PC瀏覽器驅動包括: FF driver【包含在各自語言的客戶端里】 safari driver【包含在selenium server中】 ie driver chrome driver 【第三方】 opera driver【第三方】 selenium可支持的偽瀏覽器驅動: PhantomJS Driver【第三方】 HtmlUnit Driver【包含在selenium server中】 selenium可支持的移動端驅動: Windows Phone driver 【第三方】 Selendroid -Selenium for Android【第三方】 ios-driver 【第三方】 Appium 支持iphone、ipad、android、FirefoxOS【第三方】 上述的所有驅動不僅可以直接通過各自語言客戶端來調用,還是注冊到selenium grid中進行分布式的遠程調用。 因為移動端的driver都沒有嘗試過,所以就不做說明。PC端的driver都是基于瀏覽器的,主要分為2種類型: 一種是真實的瀏覽器driver 比如:safari、ff都是以插件形式驅動瀏覽器本身的;ie、chrome都是通過二進制文件來驅動瀏覽器本身的; 一種是偽瀏覽器driver selenium支持的偽瀏覽器包括htmlunit、PhantomJS;他們都不是真正的在瀏覽器、都沒有GUI,而是具有支持html、js等解析能力的類瀏覽器程序;這些程序不會渲染出網頁的顯示內容,但是支持頁面元素的查找、JS的執行等;由于不進行css及GUI渲染,所以運行效率上會比真實瀏覽器要快很多,主要用在功能性測試上面。 htmlunit是java實現的類瀏覽器程序,包含在selenium server中,無需驅動,直接實例化即可;其js的解析引擎是Rhino PhantomJS是第三方的一個獨立類瀏覽器應用,可以支持html、js、css等執行;其驅動是Ghost driver在1.9.3版本之后已經打包進了主程序中,因此只要下載一個主程序即可;其js的解析引擎是chrome 的V8。 driver類型優點缺點應用 真實瀏覽器driver真實模擬用戶行為效率、穩定性低兼容性測試 HtmlUnit速度快js引擎不是主流的瀏覽器支持的包含少量js的頁面測試 PhantomJS速度中等、模擬行為接近真實不能模擬不同/特定瀏覽器的行為非GUI的功能性測試 PS:除上述的幾種真實瀏覽器driver中,也可以通過不同的手段來取消瀏覽器的css解析、界面渲染等目的;這樣既可以保證瀏覽器的真實兼容性、也可以提高執行效率問題;使用的手段有:autoit、pyvirtualdisplay、瀏覽器設置等。
幾種PC端driver的效率比較:from selenium import webdriverimport timedrivers = ['HtmlUnit', 'PhantomJS', 'Chrome', 'FF', 'IE']dervers_time = {'HtmlUnit' : 0,'PhantomJS' : 0,'Chrome' : 0,'FF' : 0,'IE' : 0,}times = 50def run_with_Chrome():common_step(webdriver.Chrome())def run_with_FF():common_step(webdriver.Firefox())def run_with_IE():common_step(webdriver.Ie())def run_with_PhantomJS():common_step(webdriver.PhantomJS(executable_path=r'C:\Python27\Scripts\phantomjs.exe'))def run_with_HtmlUnit():driver = webdriver.Remote("http://localhost:4444/wd/hub",desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT)common_step(driver)def common_step(driver):driver.get('http://www.baidu.com')ele = driver.find_element_by_id('su')print ele.get_attribute('value')driver.quit()for i in range(times):print '=============Times %s============' % ifor driver in drivers:start = time.time()print starteval('run_with_%s()'%driver)end = time.time()print endelapse_time = end-startdervers_time[driver] += elapse_timeprint 'elapse for %s:%s' % (driver, elapse_time)for k,v in dervers_time.items():print 'avg elapse for %s in %s times:%s' % (k, times, v/times)
得出的結果: 最快的依次是htmlunit、PhantomJS、chrome、ie、ff
幾種PC端driver的效率比較:
from selenium import webdriver import time drivers = ['HtmlUnit', 'PhantomJS', 'Chrome', 'FF', 'IE'] dervers_time = { 'HtmlUnit' : 0, 'PhantomJS' : 0, 'Chrome' : 0, 'FF' : 0, 'IE' : 0, } times = 50 def run_with_Chrome(): common_step(webdriver.Chrome()) def run_with_FF(): common_step(webdriver.Firefox()) def run_with_IE(): common_step(webdriver.Ie()) def run_with_PhantomJS(): common_step(webdriver.PhantomJS(executable_path=r'C:\Python27\Scripts\phantomjs.exe')) def run_with_HtmlUnit(): driver = webdriver.Remote("http://localhost:4444/wd/hub", desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT) common_step(driver) def common_step(driver): driver.get('http://www.baidu.com') ele = driver.find_element_by_id('su') print ele.get_attribute('value') driver.quit() for i in range(times): print '=============Times %s============' % i for driver in drivers: start = time.time() print start eval('run_with_%s()'%driver) end = time.time() print end elapse_time = end-start dervers_time[driver] += elapse_time print 'elapse for %s:%s' % (driver, elapse_time) for k,v in dervers_time.items(): print 'avg elapse for %s in %s times:%s' % (k, times, v/times) |
得出的結果:
最快的依次是htmlunit、PhantomJS、chrome、ie、ff
posted on 2014-02-18 11:29 順其自然EVO 閱讀(2109) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學習