我必须右键点击一个webelement。我尝试了以下方法:
为简化代码,假设webElem
指的是有效的Browser().Page().WebElement()
。
Set obj=createobject("mercury.devicereplay")
getX = webElem.GetROProperty("abs_x")
getY = webElem.GetROProperty("abs_y")
'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTON
上面的代码没有工作
webElem.RightClick
此代码无法正常工作
Setting.WebPackage("ReplayType") = 2
webElem.RightClick
Setting.WebPackage("ReplayType") = 1
为什么我必须更改设备重播类型以使右键单击工作?在哪里,click方法工作正常。
为什么通过Mercury.DeviceReplay
对象,MouseClick
方法不起作用?
如何通过FireEvent
方法执行此操作? (请详细解释FireEvent
方法,仅供参考:我是QTP的新手
有哪些其他方法可以做到这一点?
任何人都可以解释一些方法的工作,有些方法没有。
谢谢, Srittam
答案 0 :(得分:3)
默认情况下,QTP使用事件重播在Web元素上运行大多数步骤,这意味着它会将DOM events发送到底层DOM元素。当一个人与网页交互时,浏览器会生成许多DOM事件(例如mousemove
mousedown
contextmenu
),并且Web应用程序可能依赖于这些事件中的任何一个以触发所需的行为。 QTP不知道每个Web应用程序将使用哪些事件,因此再现了QTP开发人员认为有趣的子集(例如Click
QTP重放mousedown
,mouseup
和click
。对于RightClick
,某处还有一个contextmenu
事件(我不记得订单),并且没有click
。
您在#2 中尝试的操作失败的可能原因是因为应用程序需要的其他事件不是由QTP创建的。
当您指定ReplayType=2
时(如果#3 ),您告诉QTP的网络包使用设备重播,这意味着它物理< / em>将鼠标移动到请求的位置并执行操作。这意味着浏览器认为真人正在移动鼠标,并且将重现与人类执行操作时完全相同的事件。
如果#1 (明确使用DeviceReplay
),你应该得到完全相同的结果。我可以想到它仍然失败的两个原因。
'obj.MouseClick getX, getY,RIGHT_MOUSE_BUTTON
行注释掉,这可能是一个复制/粘贴错误,但如果这也是您尝试运行的内容,则可以解释为什么没有发生任何事情。abs_x
和abs_y
来重播点击,这是WebElement
的左上角,也许这不会到达正确的DOM元素。 设备重放模式中的RightClick
与您的实现不同的方式是它在WebElement
的中间点击(默认情况下)尝试获取元素的宽度和高度并且:obj.MouseClick getX+(width/2), getY+(height/2), RIGHT_MOUSE_BUTTON
还有另一种方法可以执行右键单击,即:
webElem.Click micNoCoordinates, micNoCoordinates, micRightBtn
但我建议反对它,因为webElem.RightClick
至少应该起作用,如果不是更好的话。