qtp識別驗證碼

2022-08-05 12:15:15 字數 2792 閱讀 3793

花了兩天時間才完整的完成識別驗證碼的登入操作,在網上看到很多關於驗證碼識別的方法,但是我用的qtp版本比較高階,所以還是要自己花心思研究。po上我的識別驗證碼的詳細歷程:
一、讀取瀏覽器中的驗證碼
1.開啟瀏覽器登入介面

2.啟動qtp,不勾選web

然後選擇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

這樣它就會彈出驗證碼的訊息框

二、識別word中的數字。在qtp中回放錄製的驗證碼,將驗證碼輸出來:

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。

三、完整的登入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瀏覽器。