centos下的selenium+phantomjs

From: http://www.easonhan.info/phantomjs/2015/01/10/ghost-driver/

參考:http://blog.chinaunix.net/uid-10289334-id-4473078.html

做過selenium自動化項目的同學應該都遇到過這樣的問題:測試用例太多,運行速度過慢導致團隊成員怨聲載道。

於是便有了selenium grid和多線程運行selenium測試用例的方法。這些方法各有利弊這裏就不一一列舉了。但總的來說,如果瀏覽器運行的速度足夠快,那麼多線程併發時的用例執行速度應該是可以滿足實際項目需求的。

再想象一下這樣的情景:如果你手頭的機器是沒有gui的(這是可能的,我以前的幾臺centos的server根本就沒有ui),如何在這樣的headless的機器上運行selenium用例呢?

答案是可以用selenium自帶的HtmlUnitDriver。不過可惜的是HtmlUnitDriver對js的支持不是特別完美,所以該方案可行但是不完善,不是特別適合用於真實項目。

好在現在有了phantomjs和ghostdriver,我們可以用ghostdriver來運行selenium測試用例。所有的用例都是在沒有gui的瀏覽器裏運行,運行速度可以得到極大的提升。再加上phantomjs是基於webkit的,所以ghostdriver完全可以模擬chrome和safari的行爲。

在我的macbookpro上,chromedriver的表現不是特別令人滿意,而我又沒有安裝firefox和safari driver,所以對於一般的頁面(js交互不是特別多的頁面),我都是用ghost driver在調試問題,快速而簡便。最主要是沒有真實的瀏覽器彈出來,不會像chromedriver那樣經常意外退出造成內存泄漏,也不會像firefox那樣運行緩慢。

下面簡單介紹一下ghost driver 與selenium合體的過程。

背景知識

下面的內容要求你已經成功的安裝好python的selenim binding。如果你有pip,直接運行 pip install selenium即可。如果被牆,請使用豆瓣源。

或者成功的安裝好ruby的watir-webdriver。如果你有gem,直接運行 gem install watir-webdriver即可。如果被牆,請使用淘寶源

安裝ghost driver

ghost driver現在已經跟phantomjs合體,所以安裝好最新版本的phantomjs就等於安裝好了ghostdriver。

這裏下載對應平臺的phantomjs。


  • 首先解壓下載好的zip文件或tar文件(linux only);

  • windows用戶將解壓過後的得到的phantomjs.exe文件加入系統的PATH中。簡單點說如果你使用pyhon,就把phantomjs.exe放到python的安裝目錄下,ruby用戶放到ruby/bin目錄下;

  • mac和linux用戶可以把解壓後得到的phantomjs建個軟鏈到/usr/local/bin目錄下。ln -s /where/is/phantomjs /usr/local/bin/phantomjs


快速開始

python用戶新建itest.py文件然後敲入下面的內容

from selenium import webdriver

dr = webdriver.PhantomJS('phantomjs')
dr.get('http://baidu.info')
print dr.title
print dr.current_url
dr.quit()

watir-webdriver用戶新建文件itest.rb然後敲入下面的內容

require 'watir-webdriver'

b = Watir::Browser.new :phantomjs
b.goto 'www.baidu.com'

puts b.title
puts b.url

b.close

討論

  • ghostdriver儘管對js的支持是不錯的,但是如果你的頁面上js交互過多的話,ghostdriver是會繳械投降的;

  • 用ghostdriver+selenium的語法可以做一些不錯的爬蟲;

  • 用java用戶請使用maven下載java的ghostdriver binding;

  • 當頁面上有flash播放器時,phantom可能會萌萌噠的卡在那裏一動不動;

  • ghostdriver基於phantomjs,phantomjs可以做爬蟲,簡單的性能測試,ui自動化測試和其他一些工作;

  • 由於沒有ui,當測試發生錯誤的時候調試的工作量就會變大;

看不到運行的過程,心中惶恐不安怎麼辦

答案是截圖拯救測試人員,截圖拯救世界。

運行到關鍵的節點或步驟時截個圖,即方便了調試又使你的測試擁有足夠多的輸出,一舉兩得何樂不爲?

python代碼

from selenium import webdriver

dr = webdriver.PhantomJS('phantomjs')
dr.get('http://baidu.info')
print dr.title
print dr.current_url

dr.save_screenshot('./baidu.png')

dr.quit()

ruby代碼

require 'watir-webdriver'

b = Watir::Browser.new :phantomjs
b.goto 'www.baidu.com'

puts b.title
puts b.url
b.driver.save_screenshot('./baidu.jpg')

b.close

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章