2013-12-13 102 views
1

在QTP11中,我有一個如下的函數來處理下拉列表按鈕。 的HTML結構如下:QTP:HTML標籤被識別,但點擊功能沒有響應

enter image description here 子FindDropdown(文本) '得到頁和文本作爲參數 計數器= 0

Set oDesc = Description.Create() 
oDesc("html tag").Value = "tr" 
Set trContent = Browser("Change Management - SAP").Page("Change Management - SAP").ChildObjects(oDesc) 
TRSum = trContent.Count() 

For i = 0 To TRSum - 1 
    Set objPage = trContent(i).Object 
    Set objTag = objPage.GetElementsByTagName("td") 
    spanSum = objTag.Length - 1 

    For intCtr = 0 to spanSum 
      strLink = objTag(intCtr).InnerText 
      If strLink = text Then 
       trContent(i).Object.click() 
      End If 
    Next 
Next 
Set oDesc=nothing 

End Sub 

雖然我已經測試,並且與內部元件選擇全部可以被識別,我不能執行一個動作(如點擊),事實上,代碼: trContent(i).Object.click() 似乎沒有效果。

這與監聽器/事件處理程序的地方有什麼關係嗎?如聽衆是不是TR或TD元素?

回答

1

我試圖共4種方法來觸發點擊事件監聽器: 1. QTP的再認識: 只是用TO包含在Object Repositery中,並點擊以觸發點擊偵聽器。沒有反應; 2.使用SendKeys方法: 它在這個Action中工作,而當我從我的主要操作中調用Action時,它不起作用; 3.使用DOM調用: 就像問題中上面的腳本一樣,我無法觸發點擊處理程序;

最後,我轉向devicereplay。這個想法獲取元素的運行時間位置,然後單擊該位置。這是某種低級別的功能,它對我而言運行平穩。 這是我的工作腳本:

Set objReleaseTR = Browser("Change Management - SAP").Page("Change Management - SAP_3").WebElement("Release all Transport") 

Set objDeviceReplay = CreateObject("mercury.devicereplay") 

x = objReleaseTR.GetROProperty("abs_x") 
y = objReleaseTR.GetROProperty("abs_y") 

objDeviceReplay.MouseClick x + 5, y + 5, 0 

Set objDeviceReplay = nothing 

希望這可以爲遇到同樣的問題球員很有幫助。

+1

更簡單的解決方案是[將重播類型更改爲設備](http://stackoverflow.com/a/6670228/3848),然後在測試對象上單擊鼠標。 – Motti

+0

感謝Motti對你的幫助,是的,這是一種改變QTP重播類型的解決方法。 – Torrence

1

如果你有一個點擊監聽器,首先驗證它。這是必需的。

你可以試試下面的代碼 trContent(I).Object.FireEvent( 「點擊」)

+0

感謝MansoorShaikh :),雖然這仍然行不通,也許事件監聽器不在TR或SPAN上,我會參考開發人員以獲取更多信息。 – Torrence