无法从 JavaTable 获取单元格数据
Not able to get cell data from JavaTable
我有下面的 table,但我无法获取其文本,即写为“要检索的文本”的文本。
我使用的代码如下,在本例中它给我带来了一个空白字符串:
Dim a
TableRows = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For Iterator = 0 To TableRows Step 1
a = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").getCellData(Iterator,1)
Next
我也试过下面的代码但没有成功,在这种情况下它给我一个错误:
Dim a
TableRows = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For Iterator = 0 To TableRows Step 1
a = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").Object.getValueAt(Iterator,1)
Next
您的 table 是基于 awt 还是 swt 的 table? (查找工具包 class)
在 swt 的情况下,事情会变得复杂,因为 UFT 主要依赖单元格的 getText Java 方法来获取其中的值。如果开发人员使用 JFace 或一些复杂的渲染,您可能需要坐下来与他们一起询问从内存中读出单元格文本值的正确方法。
大多数情况下,您必须使用 .Object(本机 Java)方法来访问 TableItem 对象,然后您可以使用 [=22= 尝试锁定] 方法,或 getData() 返回的对象上的其他方法。尽管在 TableItem 上使用 set/get Data 方法存储复杂数据可能是一种常见的做法,但这不是规则。在某些情况下,您可能真的需要与开发人员坐下来,或者如果没有逆向工程师/自己阅读代码(当然只有在法律允许的情况下)
总结:您必须了解开发人员如何将复杂数据存储在 table 项中,然后教 UFT 能够在需要时从中获取文本。这意味着使用 .Object(Native Java 方法)。
当然,如果您不想在测试库中看到此代码,您可以考虑使用 UFT Java 插件 ext. 的可扩展性套件解决方案
您好,我找到的解决方案比我想象的要简单,实际上是我的一个朋友解决了它。如下:
Text = "Text to be found"
RowCount = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For i = 0 To RowCount-1
WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").ClickCell i,2
ToBeSelected = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetCellData(i,1)
If Instr(ToBeSelected,Text) > 0 Then
WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").ClickCell i,1
Exit For
End If
Next
我有下面的 table,但我无法获取其文本,即写为“要检索的文本”的文本。
我使用的代码如下,在本例中它给我带来了一个空白字符串:
Dim a
TableRows = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For Iterator = 0 To TableRows Step 1
a = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").getCellData(Iterator,1)
Next
我也试过下面的代码但没有成功,在这种情况下它给我一个错误:
Dim a
TableRows = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For Iterator = 0 To TableRows Step 1
a = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").Object.getValueAt(Iterator,1)
Next
您的 table 是基于 awt 还是 swt 的 table? (查找工具包 class) 在 swt 的情况下,事情会变得复杂,因为 UFT 主要依赖单元格的 getText Java 方法来获取其中的值。如果开发人员使用 JFace 或一些复杂的渲染,您可能需要坐下来与他们一起询问从内存中读出单元格文本值的正确方法。
大多数情况下,您必须使用 .Object(本机 Java)方法来访问 TableItem 对象,然后您可以使用 [=22= 尝试锁定] 方法,或 getData() 返回的对象上的其他方法。尽管在 TableItem 上使用 set/get Data 方法存储复杂数据可能是一种常见的做法,但这不是规则。在某些情况下,您可能真的需要与开发人员坐下来,或者如果没有逆向工程师/自己阅读代码(当然只有在法律允许的情况下)
总结:您必须了解开发人员如何将复杂数据存储在 table 项中,然后教 UFT 能够在需要时从中获取文本。这意味着使用 .Object(Native Java 方法)。
当然,如果您不想在测试库中看到此代码,您可以考虑使用 UFT Java 插件 ext. 的可扩展性套件解决方案
您好,我找到的解决方案比我想象的要简单,实际上是我的一个朋友解决了它。如下:
Text = "Text to be found"
RowCount = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetROProperty("rows")
For i = 0 To RowCount-1
WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").ClickCell i,2
ToBeSelected = WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").GetCellData(i,1)
If Instr(ToBeSelected,Text) > 0 Then
WpfWindow("Window").JavaWindow("JFrame").JavaTable("JavaTable").ClickCell i,1
Exit For
End If
Next