在QTP11中,我有一个如下功能来处理下拉列表按钮。 HTML结构如下:
Sub FindDropdown(文字) '获取页面和文本作为参数 counter = 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
虽然我已经测试了,并且内部元素Select All可以识别,但我无法执行操作(如点击),事实上,代码: trContent(ⅰ).Object.click() 似乎没有效果。
这与侦听器/事件处理程序位置有什么关系吗?如听众不是TR或TD元素?
答案 0 :(得分:1)
首先验证您是否附加了点击监听器。这是必要的。
您可以尝试以下代码 trContent(ⅰ).Object.FireEvent( “点击”)
答案 1 :(得分:1)
我尝试了四种方法来触发click事件监听器: 1. QTP识别: 只需使用Object Repositery中包含的TO和.click来触发单击侦听器。没有反应; 2.使用SendKeys方法: 它适用于此Action,而当我从主要操作调用Action时,它不起作用; 3.使用DOM调用: 就像问题中的上述脚本一样,我无法触发点击处理程序;
最后,我转向了设备重放。该想法获取元素的运行时间位置,然后单击该位置。这在某种程度上是低级功能,它对我来说运行顺畅。 这是我的工作脚本:
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
希望这对遇到同样问题的人有所帮助。