花了兩天時間才完整的完成識別驗證碼的登陸操做,在網上看到不少關於驗證碼識別的方法,可是我用的qtp版本比較高級,因此仍是要本身花心思研究。po上個人識別驗證碼的詳細歷程:
1、讀取瀏覽器中的圖片驗證碼
1.打開瀏覽器登陸界面
2.啓動qtp,不勾選web
3.錄製驗證碼。開始錄製:在錄製的小條上選擇insert ->text area output value. 截圖驗證碼圖片的框。
而後選擇modify,output types設置爲environment,name 能夠改寫爲「getchar」。中止錄製
獲得的代碼爲:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")
4.在錄製完後的代碼上加一行:
msgbox environment.Value ("getchar")
5.在qtp上點擊run
這樣它就會彈出驗證碼的消息框
2、識別word中的數字。在qtp中回放錄製的驗證碼,將驗證碼輸出來:
在word中選中一段圖片,內容爲數字,獲取到圖片裏的數字。而後將獲取到數字在word中輸出來:
1,打開qtp,不選擇web。錄製時利用text area output value在word中選中一段圖片,內容爲數字,獲取到圖片裏的數字,保存爲環境變量getchar3.
2.新建一個test,調用剛錄製的那個action 。而後再錄製在word中輸入一段文字。
3.將文字改成環境變量getchar3的值,這樣在word中就會輸出驗證碼的值了。第二個test的代碼以下:
RunAction "Copy of Action1", oneIteration
msgbox environment.Value("getchar3") #將環境變量的值用messagebox彈出來
myword=environment.Value("getchar3") #將環境變量的值複製給一個變量
Window("Microsoft Word").WinObject("Microsoft Word 文檔").Type myword #這句是錄製獲得的。原本是Type "1234",將"1234"改成type。
3、完整的登陸OA系統。如下是action name爲oa_login_code的代碼內容。先錄製不帶web的識別驗證碼的checkcode action,再勾選web addin 錄製登陸OA系統的action。錄製時OA的登陸界面是打開的狀態。
在checkcode action中能夠在file——setting--environment--internal value,看到getchar。但在調用它的action中不能看到這個環境變量值。直接使用這個環境變量便可。
RunAction "Copy of checkcode", oneIteration
MyWebElement=environment.Value ("getchar")
Browser("流程管道,知識活水").Page("流程管道,知識活水").WebEdit("authcode").Set MyWebElement
Browser("流程管道,知識活水").Page("流程管道,知識活水").WebEdit("j_username").Set "078057"
Browser("流程管道,知識活水").Page("流程管道,知識活水").WebEdit("j password")
Browser("流程管道,知識活水").Page("流程管道,知識活水").WebEdit("j_password").SetSecure "541303024777c70d"
Browser("流程管道,知識活水").Page("流程管道,知識活水").Image("Submit").Click 2,12
其中checkcode action的代碼:
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Output CheckPoint("Internet Explorer_Server")
運行完整action後的結果:
錯誤記錄一:上面的代碼是以windows的方式錄製了截圖驗證碼圖片讀取其中的文本值,將其存爲環境變量getchar。我將值存爲global data ,回放的時候這個值不會變,存爲環境變量則每次都能獲取到正確的驗證碼。
錯誤記錄二:我單獨運行調用程序時,在qtp本身的result中能夠看到驗證碼獲取成功。可是先用戶名、再密碼,再驗證碼,獲取的驗證碼的值就爲空。因而將調用識別驗證碼的語句放在第一句,先輸入驗證碼(上面的代碼是運行成功的代碼)。這樣就能夠成功登陸了。
多是由於截圖識別框要靠鼠標和座標抓取。
經過識別驗證碼的程序學習到:
1.屏蔽多行,單獨驗證某行看是否經過。而後再執行多步
2.qtp的驗證碼識別是經過抓取圖片中的文本進行識別。如今只能識別英文。若是錄製時選擇中文(在tools-options--gui testing-text recognition中設置),也識別不到。
qtp11.5 OCR設置:在tools-options--gui testing-text recognition中設置。我在win7上裝的只有OCR這一種方式。
3.錄製時,有時候錄製不生成代碼,有時候回放不成功,要從新打開IE瀏覽器。