之前一直在研究scrapy下數據抓取,在研究ajax數據抓取時碰巧研究了一下selenium,確實很實用,不過只做scrapy下的數據抓取,不怎么合適,一是性能的損耗,一直需要開一個瀏覽器,二是對於爬蟲來說,分析ajax的請求才是正事。好吧,說遠了,今天來扯一下我對於自動化測試一些見解。
python下的自動化測試庫實在之多,selenium是瀏覽器測試的大殺器,關於selenium:
refer:http://www.seleniumhq.org/
關於安裝和python環境的一些其它指導我就不羅列了,網上一大片:)
在測試web網站的時候,經常會遇到一些需要驗證碼的輸入,這個時候輸入解析驗證碼,一般有以下的幾種方式:
1.交給程序邏輯處理:
將圖片download下來做驗證碼識別,然后填入到驗證碼框中,這樣需要有專門的驗證碼識別塊,代碼量略大
2.將驗證碼的識別碼功能暫時注釋掉
這樣就省去了驗證一步
3.寫死驗證碼功能
這樣驗證碼識別就可以隨意測試了。
其實以上的三種可能,無非看自己的和程序員們溝通的怎么樣和自己的技術水平了,如果你想練練手,完全可以自己做一個驗證碼識別功能出來,如果和開發者溝通的比如順利,可以請他們暫時注釋一下或者寫個臨時驗證碼
第四種,我們可以自己在python的打開selenium的瀏覽器的時候繼續操作,下面就直接上代碼了:
#coding=utf-8
from splinter import Browser
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')
def log_in_doban(Name = '', PassWrod = ''):
if Name and PassWrod:
bs = Browser('chrome')
bs.visit(url='http://www.douban.com/accounts/login?source=main')
if bs.is_element_present_by_id(id='email'):
bs.find_by_id(id='email').fill(Name)
bs.find_by_id(id='password').fill(PassWrod)
if bs.is_element_present_by_id(id='captcha_field'):
#bs.find_by_id('captcha_field').fill(code_img)
while True:
val = bs.find_by_id(id='captcha_field').first.value
if val and len(val)>0:
bs.find_by_id('captcha_field').fill(val)
break
pass
pass
bs.find_by_name('login').click()
print 'log in'
#bs.quit()
if __name__ == '__main__':
log_in_doban(Name='test_account',PassWrod='test_password')

我感覺selenium 可以做的事情很多很多,既然能將瀏覽用程序來控制,那其實現的功能就會很多很多,比如刷票,比如自動發貼啥的,我就不一一介紹了。
