QTP使用心得

發表于:2012-07-24來源:Csdn作者:tulituqi點擊數: 標簽:qtp
很久沒來寫東西了。最近也比較忙,任務很多?,F在遇到的問題越來越少了,或者說常見的問題都已經能自己解決了,比如查查幫助。 基本上我遇到的問題80%都可以在幫助里找到,有幾個幫助文檔比較有用的。vbscript56.chm——VBS語言(常見的函數什么的都在

  很久沒來寫東西了。最近也比較忙,任務很多?,F在遇到的問題越來越少了,或者說常見的問題都已經能自己解決了,比如查查幫助。

  基本上我遇到的問題80%都可以在幫助里找到,有幾個幫助文檔比較有用的。vbscript56.chm——VBS語言(常見的函數什么的都在這里有),web.chm(web控件的幫助),這兩個最常用。其他還有StdWin.chm(windows應用程序的控件幫助),Utility.chm(QTP的保留對象),AutomationObjectModel.chm(這個比較高級點,主要是完全用vbs來直接調用QTP進行操作。)

  今天繼續和大家分享我的心得。說實話,以后的心得會更接近心得了,目前可能還停留在問題解決上,以后估計問題遇到的會越來越少了,能遇到的就是難點問題了。

  QTP心得3

  6.引用外部API來解決問題

  問題現象:

  系統中有一些菜單是用浮動窗口做的,鼠標移動到某個菜單項上,然后下面會有浮動菜單彈出。本來可以用很簡單的Fireevent "Onmouseover" 來解決。不過我遇到的菜單這樣處理了沒有反應,而另一個同事遇到同樣的問題就可以很容易解決。

  解決辦法:

  后來據我分析,同事那邊估計那個菜單項是Link的,而我遇到的菜單項是WebElement的,據HP專家講,QTP的這個FireEvent對WebElement支持的不好。于是專家提供了一個引用外部API的方法給我來解決問題。下面拿來分享一下,也許哪天你就會碰到這樣的問題,不妨試試。

  Extern.Declare micLong, "SetCursorPos", "user32.dll", "SetCursorPos", micLong, micLong

  Extern.SetCursorPos X,Y '鼠標移動到坐標(X,Y)

  Extern.Declare micVoid, "mouse_event", "user32.dll", "mouse_event", micLong, micLong, micLong, micLong, micLong

  Extern.mouse_event 2,X,Y,0,0 '鼠標按下

  Extern.mouse_event 4,X,Y,0,0 '鼠標抬起

  這里有2個方法,分別是SetCursorPos和mouse_event。首先取得WebElement的絕對坐標,然后分別加一點(因為坐標是控件左上角,避免點不到,把坐標的橫縱坐標都加5-10左右),然后使用SetCursorPos方法,鼠標就會正常移動到那個控件上,菜單也就正常彈出來了。mouse_event可能用到的比較少,其實就是Click點擊事件,如果用這種方法寫就很麻煩,必須把鼠標按下和鼠標抬起都用上才能作為點擊的事件。后來在我做的腳本里,經常會用到鼠標移動的方法,點擊的方法目前沒用到,因為基本上Click都很正常,也許哪天出問題了就可以用這種了。

  擴展一下,其實QTP里可以用這個Extern.Declare引用很多外部的API,只要你知道怎么用,像上面兩個方法,我也是通過幫助看懂了一點點,具體這個Extern.Declare怎么用還是去看幫助吧。

  7.Tab頁或者叫選項卡的問題

  問題現象:

  某天在錄制好腳本后,執行的過程中發現遇到選項卡的頁面,如圖(類似這樣的)

  發現QTP在執行腳本的時候,其實鼠標沒有移動過去點擊那個選項卡標題,本來每個選項卡標題下面還有不同的菜單,結果這些菜單沒顯示出來,但其實頁面還能正常顯示。

  分析之后感覺,其實那些菜單都在,只是在某個不知道的地方。而QTP執行Click事件的時候,不需要鼠標真正移動過去點擊(Windows的Click鼠標會移動過去,比如點擊Msgbox的確定),所以只要那個菜單存在,頁面就會按照點擊的href 轉換頁面到你要去的地方。其實這樣本來沒什么,我也沒太在意,直到有一天遇到了問題,就是在有一個菜單居然還是浮動菜單,需要鼠標移動過去,而腳本運行的時候根本看不到那個菜單,所以也就沒法移動過去,無法顯示出菜單。

  解決辦法:

  所以我嘗試用6的那個移動鼠標的方法,讓鼠標移動到選項卡標題上,再點擊,應該就可以把菜單顯示出來,結果發現竟然取得的選項卡的坐標和用Object Spy看到的不一樣。。。后來才發現,原來選項卡標題有2種狀態,一種是選中,一種是沒有選中,我對象庫的是選中狀態的,而運行腳本的時候頁面里是沒有選中狀態的。所以這時候取得他的坐標是很怪異的坐標(好像都是負多少),在對象庫中他有一個額外識別的屬性(顯示為Type,Value什么的),選中的選項卡標題的index屬性為3,沒選中的是0,這時候需要用SetToProperty,在腳本運行到需要取坐標之前,先把對象的這個index改成0,然后就順利取到了坐標。

  于是上面的問題解決出來就是這樣:

  首先改變選項卡標題那個對象的index為0,取到選項卡標題的絕對坐標

  然后鼠標移動到選項卡標題的上面,點擊選項卡標題,需要的菜單在頁面里正常顯示出來了。

  接著鼠標移動到菜單上,浮動菜單彈出來了,點擊菜單。

  很多時候,解決問題先要想清楚思路,然后分析每條路徑,找到最合適自己的,也最方便快捷的。

  前面給大家介紹過的ChildObject方法真的很強大,基本上我的案例的每個action里面至少會有一處用這個方法來識別對象,而且我做的系統的很多提示頁面都是message為標題的頁面,估計統一調用的方法,里面提示的信息不同,沒法用一個具體名字來識別里面的WebElement,用了ChildObject方法,居然很容易實現了重用,因為每個message頁面都一樣,從其他地方寫好的方法直接放到另一個地方,直接就能取到需要的信息,然后再進行判斷。

  最后,希望大家多加強自己編程方面的知識,有時候編程思想能更方便的去幫你解決問題。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97