1

在 QTP11 中,我有如下功能来处理下拉列表按钮。HTML结构如下:

在此处输入图像描述 Sub FindDropdown(text) ' 获取页面和文本作为参数 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(i).Object.click() 似乎没有效果。

这与侦听器/事件处理程序的位置有什么关系吗?比如listener不就是TR还是TD元素?

4

2 回答 2

1

首先验证您是否附加了点击侦听器。这是必需的。

您可以尝试以下代码 trContent(i).Object.FireEvent("onclick")

于 2013-12-16T08:12:48.227 回答
1

我总共尝试了四种方法来触发点击事件监听器: 1. QTP 识别:只使用对象存储库中包含的 TO,然后 .click 来触发点击监听器。没有反应; 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

希望这对遇到同样问题的人有所帮助。

于 2013-12-17T05:46:26.350 回答