2

我正在寻找使用 QTP 触发弹出菜单操作的想法。

我正在使用 QTP 测试一个 Web 应用程序。该应用程序具有“级联”或分层弹出菜单。

例如Options->Preferences

在重新编码 QTP 时,会识别菜单层次结构上的端点(比如“首选项”)。但是在运行测试时,触发 WebElement("Preferences").Click不起作用。

如果我调用Link("Options").FireEvent ("onmouseover")它会下拉菜单,然后我可以突出显示 Preferences 项,但是即使在下拉菜单后调用单击也无法触发菜单操作。

任何在这些菜单项上触发点击操作的想法都会很有用。

问候,
阿达沙

4

5 回答 5

5

如果Click没有完成这项工作,那么可能还有其他 Web 应用程序期望的事件不是 QTP 模拟的。解决此问题的一种方法是打开 Web 的设备重播模式:

Setting.WebPackage("ReplayType") = 2 

在测试中的这一行之后,每当 QTP 看到一个Click步骤时,它将通过将鼠标移到元素上并模拟单击来重放它,以便触发人类触发的所有事件。

要返回默认事件重播模式,请设置"ReplayType"为 1。

于 2009-09-21T18:06:37.240 回答
2

由于在执行 QTP 时失去多任务处理,我没有按照 Motti 的建议实施。因此,我最终浏览了 HTML 代码,以查看 java 脚本期望哪些鼠标事件。事实证明我需要调用以下序列:

Link("Options").FireEvent ("onmouseover")
WebElement("Preferences").FireEvent ("onmouseover")
WebElement("Preferences").FireEvent ("onClick")

这个技巧真的很好用,但这里的风险是如果他们彻底改变任何东西(比如如果他们使用 onMouseDown 而不是点击 Click),我需要调整测试脚本。

于 2009-09-27T02:32:23.283 回答
1

我还有一个选择。使用它来单击任何对象。

Set objMenu = Browser("Browser").Page("Pagel").WebElement("Menu_ELM")
Set objDeviceReplay1 = CreateObject("mercury.devicereplay")
x = objMenu.GetROProperty("abs_x")
y = objMenu.GetROProperty("abs_y")
objDeviceReplay1.MouseClick x + 35 , y + 5,0
Set objDeviceReplay1 = Nothing
于 2010-12-13T19:48:49.763 回答
0

这是我对类似问题所做的:

Set desPrefLink = Description.Create
    desPrefLink("micclass").value = "Link"
    desPrefLink("innertext").value = "Preferences"

Browser(X).Page(Y).Link(desPrefLink).Click()

不过,它可能不适用于更动态的 Javascript 菜单。

于 2010-07-20T21:13:54.593 回答
0

我有类似的情况以稍微不同的方式处理,首先单击父链接, 然后在序号标识符的帮助下Options触发 fireeventonclick

eg: browser().page().link(options).click

browser().page().link("name:=preferences","html tag:=A","index:=X").firevent "onclick"

理想情况下,这将加载预期的父链接并有助于触发点击事件 - 希望这会有所帮助。

于 2015-10-05T10:41:25.343 回答