上次的第一點其實就是描述式編程,有時候描述式很方便,不過有時候也不方便,比如我下面遇到的問題。當然,這幾天還碰到一個日歷控件,開始用了笨方法,今天發現好的方法了,拿來分享一下。
QTP心得2
4.ChildObjects的妙用
問題現象:
1) 頁面上有一個下拉列表WebList,會根據一個比較隨機的條件變為可用或不可用,可用的時候需要選擇下拉的選項,郁悶的是可用和不可用的時候控件的name不一樣。如果用exist去判斷,雖然可以,但是總會出warning。
2) 頁面上有2個按鈕WebButton,一個確定一個返回,他們的name、text等很多屬性值都是一樣的(我想XX了那個開發),不同的地方是一大串字符,他把點擊按鈕調用的函數,style等等很多東西都寫在里面,如果用描述式去判斷我覺得很麻煩。我后來用了坐標,結果窗口位置一變就識別不到了。
解決辦法:
上面兩種問題其實都需要另外一種識別控件的方法,常用的幾種都無法行得通。于是在查看幫助的時候發現了這個ChildObjects,返回對象中包含的子對象的集合。忽然覺得這個很有用,正好有示例,如下:
Sub ChildObjects_Example()
'The following example uses the ChildObjects method to find all the
'list objects on a Web page, and then to select an item in each list.
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebList"
Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
NumberOfLists = Lists.Count()
For i = 0 To NumberOfLists - 1
Lists(i).Select i + 1
Next
End Sub
突然我就想發現了新大陸一樣,只要返回了一個同類型的對象集合,然后用這個集合來定位到我要的控件。這里只要判斷他是集合里的第幾個就行了,而我遇到的問題的控件位置都是固定的。于是使用這個方法順利解決了。
可以說,這是另一種識別對象的方法,對于難以識別的對象來說,這個方法實在太方便了。具體解決辦法,只要根據幫助的內容稍加修改就可以了,這里簡單寫一下。
Set oDesc = Description.Create()
oDesc("micclass").Value = "WebButton"
Set Lists = Browser("瀏覽器名字").Page("頁面名字").ChildObjects(oDesc)
Lists(0).Click '我要的控件是第一個
'另一個WebList的就是判斷那個控件的name是什么,然后就知道現在這個下拉列表是可用還是不可用,就可以繼續操作了。
5.給disabled的控件賦值
問題現象:
有一個日歷控件,是一個WebEdit,WebEdit的disabled屬性是1,不可以寫,只能點擊彈出日歷框,我后來找到控件有規律的地方(這個控件的WebElement的innertext沒什么規律可言,只有html id是有規律的day0-day34,固定位置的控件的html id一樣。),寫了個函數,用描述式編程選定控件,最后得到我要的日期。今天看到另一個系統的老案例,發現人家一句代碼就搞定了。
解決辦法:
首先,對于disabled為1的WebEdit,不能用Set的,那樣會報錯。
應該用:Browser("名字").Page("名字").WebEdit("名字").Object.Value = "2008-11-12"
我實在很佩服,這個方法就是看幫助我也找不出來的,于是我就把我的都換掉了,一是怕點日歷出錯,二是覺得太慢,不如這個快。哈哈。
俗話說久病成醫,現在問題解決的多了,自己也有信心了,在組內基本上快成高手了,大家有問題都找我去幫忙解決,說實話,遇到問題很頭疼,一定要保持冷靜,但是解決問題之后,實在是很高興,同時也積累了豐富的經驗。
原文轉自:http://www.anti-gravitydesign.com