天天看點

QTP的那些事--QTP回放iFrame控件時間非常慢的問題分析

最近在用QTP實作錄制回放Web應用時,又碰到了iFrame這個對象。雖然我對開發中,這個對象的用法知道的不多,但是對這個對象回放非常慢,已經是我第二次遇到了,上次的客戶那裡,我沒有找到什麼好的辦法,但這次偶然發現了一個折中的解決辦法。

首先還是要抱怨一下,貌似網上就沒有對這個問題的讨論貼,難道大家都那麼好命,沒有遇到?要不就是這本身就是一個很好解決的問題,不用這麼大費周折?不管了,記錄下我的思路,留着用吧。

描述一下現象:

首先,錄制是沒問題的,iFrame對象和它包含的對象都能正确識别,當回放一個用到iFrame對象的頁面的時候,如果目前的頁面的載入狀态是完成(IE左下角辨別)的時候,識别是非常快的,回放也很快,對這個對象或對象裡的對象的操作也馬上會完成。

但是,如果目前頁面的載入狀态不是完成,而是剩下1項或2項,或者對于IE來說,右上角的棋子是飄動狀态,而不是靜止狀态的時候,對這個iFrame對象的識别就非常慢,有時會持續到10~20分鐘,雖然在界面上,這個對象以及他包含的對象,已經全部裝載進來了。

分析:

出現這樣的問題,我首先想到的,就是頁面沒有裝載完,還剩下幾項沒有完成,是以QTP的步驟就一直在等待頁面裝載。可是從QTP識别對象的方式講,1.它同步頁面裝載,是有time out限制的,一般是60s,但我設小後,對這個case也不起作用,我将一些對識别對象有影響的timeout時間都調小了,還是無濟于事;2.QTP一般隻要找到界面上的某個對象,馬上就會對他進行操作,有時都不會等頁面裝載完成,這個時間快得有時都看不清楚。在這個case裡,我肉眼已經清清楚楚的看到被操作的對象已經出現了,但QTP還是要等那麼久。

這樣的話,就有極大的可能,是頁面還沒有裝載進來的那1項,2項,可能有問題了。不然為什麼對“完成”狀态的iFrame識别很好很快,對這種“剩下1項”的就出問題呢。

可是,從開發的角度講,開發人員目前并不能定位出,出現這種“剩下1項”的問題在哪裡,而且這樣的問題,對使用者在界面上的操作,的确不會産生任何影響,因為使用者手動操作界面,他看到要操作的對象,直接點選,指派之類的,不用管狀态欄的“剩下1項”,也能正常操作,不會報任何錯誤。不過QTP就卡在這了。

由此看來,開發不講其定位為缺陷,又要讓QTP對這類功能加快回放速度(這種等待,對于腳本調試工作來講,簡直就是夢魇),隻能找個折中的辦法了,那就是 ————

一個偶然的操作,在界面中等待的時候,我點選了一下IE視窗的還原按鈕,一下子就識别出來了,後面的操作一溜煙兒的就進行下去了。于是我在腳本中的那個需要等待的操作前,增加了一步對IE還原和最大化的動作,這樣在回放時,每到這個位置,IE自動縮放一下,後面的動作就迅速的進行下去了。

這樣,算是變相解決了這個問題,不過還是要反思的:

1. 我還沒有在其他浏覽器中嘗試,不知道是不是問題依舊。如果其他浏覽器也存在這個問題,就說明這種“剩下1項”的問題,是程式中一個潛在的問題,不知道他會不會引發更嚴重的問題,當然如果僅此而已,也就是僅僅會對QTP回放産生影響。如果其他浏覽器沒有這個問題,那麼可以用IE錄制,其他浏覽器回放。不過也說明這個“剩下1項”的問題,開發沒有對IE做好适配。

2. 究其深層次的原因,如果這個回放巨慢的問題,應用的内部bug引起的,那麼這次我碰到的是“剩下一項”,而使用縮放IE可以解決,萬一下次碰到的不是一個可以表露在外的現象,又或找不到折中解決的途徑呢。不知道,如果是應用的問題,QTP能不能定位一下是哪的問題,或者如果是QTP識别的問題,能不能優化下它的識别政策呢。

期待以後更深入的研究吧

本文轉自hcy's workbench部落格園部落格,原文連結:http://www.cnblogs.com/alterhu/archive/2012/01/18/2325544.html,如需轉載請自行聯系原作者。

繼續閱讀