在QTP中右键单击webelement有哪些方法?

时间:2012-12-11 07:03:41

标签: qtp right-click

我必须右键点击一个webelement。我尝试了以下方法:

为简化代码,假设webElem指的是有效的Browser().Page().WebElement()

1)

Set obj=createobject("mercury.devicereplay")

getX = webElem.GetROProperty("abs_x")
getY = webElem.GetROProperty("abs_y")


'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTON

上面的代码没有工作

2)

webElem.RightClick

此代码无法正常工作

3)以下代码工作:

Setting.WebPackage("ReplayType") = 2

webElem.RightClick

Setting.WebPackage("ReplayType") = 1

我的问题是:

  1. 为什么我必须更改设备重播类型以使右键单击工作?在哪里,click方法工作正常。

  2. 为什么通过Mercury.DeviceReplay对象,MouseClick方法不起作用?

  3. 如何通过FireEvent方法执行此操作? (请详细解释FireEvent方法,仅供参考:我是QTP的新手

  4. 有哪些其他方法可以做到这一点?

  5. 任何人都可以解释一些方法的工作,有些方法没有。

    谢谢, Srittam

1 个答案:

答案 0 :(得分:3)

默认情况下,QTP使用事件重播在Web元素上运行大多数步骤,这意味着它会将DOM events发送到底层DOM元素。当一个人与网页交互时,浏览器会生成许多DOM事件(例如mousemove mousedown contextmenu),并且Web应用程序可能依赖于这些事件中的任何一个以触发所需的行为。 QTP不知道每个Web应用程序将使用哪些事件,因此再现了QTP开发人员认为有趣的子集(例如Click QTP重放mousedownmouseupclick 。对于RightClick,某处还有一个contextmenu事件(我不记得订单),并且没有click

您在#2 中尝试的操作失败的可能原因是因为应用程序需要的其他事件不是由QTP创建的。

当您指定ReplayType=2时(如果#3 ),您告诉QTP的网络包使用设备重播,这意味着它物理< / em>将鼠标移动到请求的位置并执行操作。这意味着浏览器认为真人正在移动鼠标,并且将重现与人类执行操作时完全相同的事件。

如果#1 (明确使用DeviceReplay),你应该得到完全相同的结果。我可以想到它仍然失败的两个原因。

  1. 在您的代码示例中,您已将'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTON行注释掉,这可能是一个复制/粘贴错误,但如果这也是您尝试运行的内容,则可以解释为什么没有发生任何事情。
  2. 更可能的解释是,您使用abs_xabs_y来重播点击,这是WebElement的左上角,也许这不会到达正确的DOM元素。 设备重放模式中的RightClick与您的实现不同的方式是它在WebElement的中间点击(默认情况下)尝试获取元素的宽度和高度并且:obj.MouseClick getX+(width/2), getY+(height/2), RIGHT_MOUSE_BUTTON
  3. 还有另一种方法可以执行右键单击,即:

    webElem.Click micNoCoordinates, micNoCoordinates, micRightBtn
    

    但我建议反对它,因为webElem.RightClick至少应该起作用,如果不是更好的话。