我正在通过 UFT 自动化应用程序,在此过程中,我需要从 SwfTable 中的记录列表中搜索特定文本。
该表有列标题,在其中右键单击列标题将让我输入过滤器文本。
我的桌子看起来像这样
右键单击列标题将让我输入过滤器文本
为表捕获的代码片段是
SwfWindow("XXX").SwfWindow("Dashboard").SwfTable("completedGrid").
我在很多论坛上搜索过,但没有找到解决方案,有人可以在这里帮助我。
通用且不可知论的解决方案是:GetTextLocation
. 您在 Table 上调用该方法(也可以定义 Search Rectangle),该方法将告诉您找到 Text 的 Rectangle 的坐标。这主要基于文本识别,所以它会非常不稳定:忘记它,很少工作:)
更好的解决方案是:
x = CINt(SwfTable("Table").GetCellProperty 0, "COLNAME", "x")
y = CINt(SwfTable("Table").GetCellProperty 0, "COLNAME", "y")
这些是列中第一行单元格的坐标。现在我们只需要移动到这个 Column 的 Header 的中心。这只是另一个计算
' Move Right
x = x + 20
' Move Up
y = y - 20
这可能有效,但它仍然非常粗糙并且很容易变得不稳定。使用相同的方法,您可以获得单元格的高度和宽度属性并使用它来计算页眉的中心:
x = x + (width / 2)
y = y - (height / 2)
好多了,但意味着您的标题单元格与您的表格单元格具有相同的大小。
如果不是这种情况,您必须使用对象方法并通过一些逆向工程获取对表列的引用并进行一些计算。
总结:它是关于在矩形和基本几何体之间导航。您可以变得更漂亮,甚至可能不需要使用 Object 方法,只需绘制并使用它即可。
差点忘了:当你有坐标时:
SwfTable.Click x, y
这些是相对坐标,因此您无需将它们添加到 abs_x 和 abs_y。
我在自动化 Web 应用程序时遇到了类似的问题。这就是我所做的:
Set menu=Browser("").Page("").WebElement("")
idx=2
'This var. points the which option to select in the right click menu. This var. is
'always the option+1 value. Ex. If u want to select the second option then the var.
'should have the value 3
Set obj = CreateObject("Mercury.DeviceReplay")
Set WshShell = CreateObject("WScript.Shell")
'Get the absolute coordinates of the ibject
absx = menu.QueryValue("abs_x")
absy = menu.QueryValue("abs_y")
obj.MouseClick absx, absy, 2
'Optional wait statement
wait 1
For i = 1 To idx-1
WshShell.sendkeys "{DOWN}"
Next
WshShell.sendkeys "{ENTER}"
Set WshSEll = nothing
Set obj = nothing
如果您的 AUT 是桌面应用程序,只需将菜单更改为您要右键单击的元素。希望能帮助到你!