我所錄制的腳本中,包含這樣的操作:1、在IE頁面的表格中點擊一個靜態的帶有文字的單元格;2、從EXCEL數據文件中復制數字區域(自己編寫的方法);3、使用sendkeys方法將該復制的內容粘貼到IE的表格中。在做腳本錄制的時候是非常順利的,但是當第二天再打開腳本的時候,卻發現腳本回放不了。在使用sendkeys方法的時候腳本無法將數據粘貼到IE界面,而且最令人蹊蹺的是,每次失敗的表現還不一樣,有時會提示“頁面錄入值非法”,判斷這是由于復制區域與粘貼區域單元格錯誤導致的;有時會提示“剪切板無數據”,但是如果此時停止腳本,手工按下“CTRL + V”卻能粘貼,說明復制是有效的,只是粘貼的時候出錯了。
單憑以上現象我們不能指責QTP的不好,畢竟如果測試環境有變化的,會影響到QTP腳本的回放。但是這才是讓我郁悶的:腳本是一模一樣的腳本;環境是一模一樣的環境,只是隔了12個小時(晚八點關機到早八點開機),結果腳本就出現了這樣的問題。
既然出現了問題了那就解決吧,又不能告訴老板說是QTP不好,畢竟QTP只是一個工具,如果工作完不成的話還是要找素質方面的原因。呵呵。首先根據問題的表現,判斷是粘貼步驟出錯了,于是打開lib庫,逐行審查代碼,在原來的代碼中讀取EXCEL使用的方法是
set excel = getobject("h:src1.1data預算指標管理.xls")
set sheet = exce.........
想一想這樣寫雖然最初腳本是能運行通過的,但是畢竟跟文檔上的寫法不一樣,于是換成了createobject方法
set excel = createobject("excel.application")
set workbook = excel.workbook.open(filename)'filename是文件的目錄
set sheet = workbook.worksheets(sheetname)'sheetname是EXCEL工作表名
sheet.activate‘激活當前工作表
寫完以后,保存,然后重新打開腳本、打開軟件、運行腳本,OK,通過了,腳本能順利的回放,于是在LIB函數上寫上自己的大名、時間和修改原因及修改方法并將更新后的文件發送給項目組里的其他人。
不過這個時候心里還是有點疑問,因為從代碼的執行上來看,getobject和createobject并沒有本質的區別,即使有,也不應該會影響到數據的粘貼操作。因為使用sendkeys方法時,其實訪問excel的腳本已經執行完畢了。為了穩妥起見,這個問題還是要確認一下的。于是重新打開昨天的腳本,將代碼恢復到修改前的狀態,然后打開被測系統,點擊run運行腳本,發現這次腳本運行竟然pass了。
這個時候我徹底瘋了!老天啊,你為什么要如此對我!為什么同樣的腳本,同樣的機器、很短的時間間隔,兩次運行腳本的結果竟然會完全不一樣。而且腳本的執行人都是我,總不能說是人品問題了吧,F在估計項目組里的其他人正在那里納悶呢:腳本運行的好好的,干嘛要改啊。但是這不是我的錯啊,我的確就是碰到了腳本運行失敗的情況,而且修改后確實是能運行了。鬼知道那段腳本是怎么回事。我實在心里有點不甘,于是把那段腳本再次運行一遍,OK,完全PASS。
現在我確實是無奈了。為了確認對腳本的修改無誤,我又把修改后的腳本運行了三遍,確認腳本是沒有問題并且能PASS的,這下算是放心了。本以為事情到這里就結束了,但是其實更樂的還在后面。
第三天是個周六,考慮到腳本錄制的比較順利,我就沒去加班,反正錄制腳本時我一直用的是自己的筆記本,在宿舍或是在公司都是一樣滴干活。早上懶懶得伸了個腰,習慣性的打開QTP,打開被測系統,打開腳本,點擊了一下RUN,然后漫不經心的看著腳本運行,本來都準備好去刷牙了,結果突然發現屏幕上彈出了一個信息提示框,上面赫然顯示著:剪切板無數據!
我崩潰了。差點沒把手里的牙缸扔出去,不過考慮到那是自己的筆記本,最后還是壓抑住自己憤怒的心情,真TM見鬼了!看來今天又有事情干了。
洗完臉刷完牙,回到了電腦旁,看到這種情況,首先考慮的是sendkeys的問題,作為一個模擬鍵盤輸入的函數,sendkeys具有天生的不穩定性。因為這個函數被調用的時候,如果焦點發生了變化它也會很白癡的把預先準備好的內容發送過去。但是這個情況跟sendkeys方法是沒什么關系的,既然提示剪切板無數據,那應該是EXCEL沒有進行復制吧。于是嘗試性的按下了“CTRL+V”,發現復制已經完成了,剪切板里是有數據的。我靠!
后面發生的事情就很簡單了,修改代碼、運行、失;修改代碼、調試、成功、運行、失;再修改代碼、調試、成功、運行、成功、再運行、成功、再運行、失敗……。整整一天就在不斷的修改代碼和運行代碼中渡過。從早上7點半一直改到晚上六點,把所有可疑的地方都過了一遍,無數次訪問msdn,無數次的運行代碼。但是運行的成功率總達不到100%。而且最后一次改的腳本還是無法運行,當運行時會提示“剪切板無數據”。于是我開始嘗試最后一種情況,將筆記本作為服務器,將腳本的運行環境移到我的臺式機上。在臺式機上打開QTP、打開剛才運行出錯的腳本、打開被測系統,點擊run,OK,運行完全PASS。為了穩妥起見,我將這段腳本循環了100次,就在電腦旁守著,一直等到腳本運行到22次的時候,還是一點問題沒有,完全PASS!
這個時候地球上任何一種語言都無法描述我此時的心情。當年紅軍過完草地后,那是一種生存下來的勝利的心情;賴昌星逃到加拿大后,那是一種逃脫后的僥幸性情;王浩打敗柳承敏以后,那是一種拼搏、付出,享受收獲的喜悅心情。我呢,我象一個傻瓜似被QTP耍得團團轉,一會兒告訴我腳本運行失敗,一會兒告訴我腳本運行順利,眼看著循環次數已經達到35次還正常運行,我心里卻一點沒有興奮的心情,我現在最想得到的就是QTP這個項目組的MSN或者是郵件,如果他們有中國人的話我會恨不得打電話過去,我要向他們傾訴我這兩天的酸甜苦辣,我要問問他們,這種情況是屬于我自己腳本的問題還是QTP本身設計上的缺陷;我要跟他們聊聊以后QTP改進的方向,想著想著,不知道為什么我突然笑出來了,而且笑的很開心,但是笑的卻很緩,如果旁邊有人的話,他肯定說我是神經病,是瘋子。
我看我的確是快瘋了……
文章來源于領測軟件測試網 http://www.kjueaiud.com/