之前一直在研究scrapy下數據抓取,在研究ajax數據抓取時碰巧研究了一下selenium,確實很實用,不過只做scrapy下的數據抓取,不怎么合適,一是性能的損耗,一直需要開一個瀏覽器,二是對於爬蟲來說,分析ajax的請求才是正事。好吧,說遠了,今天來扯一下我對於自動化測試一些見解。
python下的自動化測試庫實在之多,selenium是瀏覽器測試的大殺器,關於selenium:
refer:http://www.seleniumhq.org/
關於安裝和python環境的一些其它指導我就不羅列了,網上一大片:)
在測試web網站的時候,經常會遇到一些需要驗證碼的輸入,這個時候輸入解析驗證碼,一般有以下的幾種方式:
1.交給程序邏輯處理:
將圖片download下來做驗證碼識別,然后填入到驗證碼框中,這樣需要有專門的驗證碼識別塊,代碼量略大
2.將驗證碼的識別碼功能暫時注釋掉
這樣就省去了驗證一步
3.寫死驗證碼功能
這樣驗證碼識別就可以隨意測試了。
其實以上的三種可能,無非看自己的和程序員們溝通的怎么樣和自己的技術水平了,如果你想練練手,完全可以自己做一個驗證碼識別功能出來,如果和開發者溝通的比如順利,可以請他們暫時注釋一下或者寫個臨時驗證碼
第四種,我們可以自己在python的打開selenium的瀏覽器的時候繼續操作,下面就直接上代碼了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#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 可以做的事情很多很多,既然能將瀏覽用程序來控制,那其實現的功能就會很多很多,比如刷票,比如自動發貼啥的,我就不一一介紹了。