以下是我經常遇到的問題:
一、無法識別控件。
二、錯誤回放過程未知彈出窗口。
三、加載.net插件后和tdirector/" target="_blank" >testdirector/" target="_blank" >TD的關聯問題。
四、動態加載元素的識別問題。
五、調用外部dll的問題。
六、隨機驗證碼的問題。
問題一,解決辦法有三種:
1、更改QTP自身對某控件的識別方式,在tools——Object Identification中。在這里列出了所有QTP能識別的控件,以及控件的識別方式。你可以給他添加X、Y坐標進行識別?;蚋黠@的,列表中的信息,不按名稱識別,而是按ID識別。這個修改可以解決一些問題,具體的趕緊動手試試吧……
2、使用虛擬物件,來定義一個控件,在tools——Virtual Object中。在這里可以自定義一個控件。例如在ASP的程序中,程序出錯,在客戶端的表現形式大部分是一樣的,你可以把整個錯誤頁面當成一個控件來識別(感覺不錯)。如果加一個判斷,出錯后你想做什么就由你自己定了。
3、使用低級錄制或鼠標錄制。用Test——LowLevelRecording/AnlogRecording吧,用它錄制就不需要什么設置了,他會記錄你的程序控件相對屏幕的位置。用LowLevelRecording還有代碼可改,用AnlogRecording動作就被封裝了(維護性極差)。兩者因實際環境更取其長吧……
問題二的解決過程:
關于彈出提示的問題,我當時需要情況是這樣的。一個信息錄入系統,由于數據量很大,查詢需要一段時間。QTP回放時動作比較快,點了保存,程序還沒反應過來它就進行了下一步操作。這時的操作就和錄制時不一樣了,程序給出一個提示,但這個提示是錄制過程沒有的。彈出框是一般都是POP形勢(至上)的,導致QTP無法繼續回放,結果就是回放失敗。
解決辦法有兩個:
1、進行判斷,當出現這個提示時,點是/否/取消按鈕。
2、通過Tools——Recorvery Scenario Manager設置默認操作。
我最初就是用的第一種方法。寫一個函數判斷是否出現這個提示,如果出現就點“取消”然后wait(2)。 每個可能出現彈出框的動作后都調用一次這個函數。雖然可以解決這個問題,但回放的效率就低了,而且需要你預知提示框的信息。
當我知道了第二種方法,顯然更科學^_^。它可以對所有預知甚至不知的提示進行指定的操作。
實際上,當程序出現了未預知的提示時,可能就是程序的BUG,所以使用上述辦法解決工具問題時,也要考慮是否會掩蓋程序的缺陷。
問題三的解決辦法:
用好QTP后,會不自覺的和TD關聯起來。但從TD直接啟動QTP時,程序只會加載QTP自帶的插件,如果你安裝了其它插件(如.net、java、etc.),默認是不加載的。這會導致上傳的腳本無法正確執行。解決辦法很簡單,去Test——Setting里進行Modify吧。從本地打開的腳本,這里不能進行Modify的。所以辦法很簡單,但如果不知道的話就很難了。當初為這個問題我可是廢了八牛三虎之力呢……
問題四的解決過程:
當我開始改代碼時,定義一個動作,然后可以生成N個動作。假設N個動作產生了N個結果,你要對這結果進行處理時,你會發現這N個結果都不能被識別:
網頁上有個表格,是往數據庫里加數據的。
兩個表格顯示在同一個頁面上,左邊為父表,右邊為子表。
點擊左表,右表顯示其子項目。
結構如下:
A
├─1
├─2
├─3
└─4
B
├─1
├─2
├─3
└─4
……
思想很清晰:
添加一個父項A、選中此父項A、對其添加子項1、2、3、4
添加一個父項B、選中此父項B、對其添加子項1、2、3、4 ……
代碼也很簡單:
dim M '定義父項數
dim N '定義每個父項包含的子項數
For i=1 to M
Call添加父項( i )
選中父項( i ) '問題就出在這里
For j=1 to bwfl step 1
Call添加子項( j )
Next
Next
現在問題出來了,思路應該沒有問題(除非這方法真的行不通),循環也是順著思想來的。
問題是,無法實現選中的父項(最多識別到一個)。
由于此循環可以在錄制過程進行,如果不改變變量名稱,循環可且只可以成功運行一次。問題是這個名稱都是從DataTable里獲取的。
因為,在運行過程中生成的項目沒有加到對象庫中,無法被識別。
這個問題最后是從思想上解決的。答案是我做的是功能測試,為什么不先加父項,檢查父項的功能是否正常,然后再去測子項的功能。不去改變名字,因為那沒有必要。核心答案“功能測試、測試功能”。即對測試工具首先需要有正確的認識。
當然,這個問題可以用代碼去實現,但那需要有一定的編程功底且耗時,可維護性不一定好。有需要的朋友可以去試一下,然后把你的經驗也共享一下。 *^_^*
問題五,是對QTP很大的一個擴充。
對于QTP調用外部DLL的功能,由于我的編程功底不夠,沒有相關人士配合我,我只能望之垂涎了!
如果能調用外部DLL的話,QTP的功能就可以變得很強大。自己寫的程序,自己編一些過程用QTP進行測試,我想“后果很嚴重” 。真想有一次給我嘗試的機會……
問題六,解決辦法有4個:
1、測試的時候,讓程序員把這塊限制去掉,免去驗證這關。
2、讓程序員提供一個萬能驗證碼,測試可以繞過這一關。
3、請程序員提供識別的方法,從獲取的圖片讀出驗證數據,再傳給QTP。
4、進行位圖檢查,將驗證碼分段進行圖像驗證。
實際上,驗證碼的目的就是防止用程序灌水或機器錄入信息。所以有點為難我們測試了。
方法1,如果程序已在發布并有客戶使用,危險性是可想而知的。方法2雖然可以解決驗證這一關,但跳過了輸入碼與驗證碼一致性問題。方法3就需要程序員配合了,可能就需要調用DLL了。方法4卻將圖像分段,把獲取的圖像和已經的圖像進行比對,比對通過取對應的值;這個在數字驗證會好做一點,因為最多就四個圖像的比對。
原文轉自:http://www.anti-gravitydesign.com