我想使用动态对象识别(描述性编程)来找到在某些给定文本之后出现的第一个标记为“删除”的按钮(例如,出现在文本“项目 XYZ-123”之后的第一个删除按钮)。如果文本和按钮都在 webtable 的单行内,我有一种笨拙的方法,但我希望有一个更优雅或更可靠的解决方案(希望不依赖表格的解决方案)。
我宁愿避免使用 .Object 属性,因为文档声称 .Object 属性仅在您在 IE 中测试时返回 DOM 对象,而不是在 Firefox 中。
谢谢!
我想使用动态对象识别(描述性编程)来找到在某些给定文本之后出现的第一个标记为“删除”的按钮(例如,出现在文本“项目 XYZ-123”之后的第一个删除按钮)。如果文本和按钮都在 webtable 的单行内,我有一种笨拙的方法,但我希望有一个更优雅或更可靠的解决方案(希望不依赖表格的解决方案)。
我宁愿避免使用 .Object 属性,因为文档声称 .Object 属性仅在您在 IE 中测试时返回 DOM 对象,而不是在 Firefox 中。
谢谢!
假设没有更简单的方法可以做到这一点,您可以尝试解析 HTML。在 HTML 中找到搜索文本,然后从该点开始在 HTML 中搜索“删除”按钮。您应该能够从可用于描述性编程的 HTML 中提取 id 或其他标识属性。
您是否有示例 HTML 和 QTP 代码可供我们查看以了解更多详细信息?也许有更简单的方法。
这是一个使用该sourceIndex
属性的解决方案,请注意这sourceIndex
是一个仅限 IE 的属性,但 QTP 在 Firefox 上模拟它,因此相同的脚本将在两个浏览器上运行。您可以选择使用基于坐标的属性,例如abs_x
,abs_y
如果source_index
不符合要求。
下面的代码回答了所提出的问题,使其成为一个通用函数,留给读者作为练习;o)
''#1. Create description for locator text
Set textD = Description.Create()
textD("micclass").Value = "WebElement"
textD("innertext").Value = ".*Item XYZ-123.*"
''#2. Find locator sourceIndex
set texts = Browser("B").Page("P").ChildObjects(textD)
Set text = texts(texts.Count-1) ' Take last text '
textIdx = text.GetROProperty("source_index") ' works for FF too '
''#3. Create description for button
Set buttonD = Description.Create()
buttonD("micclass").Value = "WebButton"
buttonD("value").Value = "Delete"
Set btns = Browser("B").Page("P").ChildObjects(buttonD)
''#4. Find first button after locator text
For i = 0 To btns.Count
If btns(i).GetROProperty("source_index") > textIdx Then
btns(i).Click ' Or whatever you want to do with it '
Exit For
End If
Next
关于此解决方案的注意事项:
.*
s 和/或添加“html 标签”以获得更好的性能。
BODY
等。ChildObject
过滤掉WebElement
s 假设它们不感兴趣。让我先重新表述一下这个问题。
如果行号未知但您有唯一的键值来查找行,如何检索对 WebTable 中包含的对象的引用?
这适用于按钮、复选框、组合框和表格中的任何其他对象。
执行。
1) 查找行
intRow = objWebTable.GetRowWithCellText(sKeyValueText, "Item") 您可以按名称或编号指定列
2) 检索子对象
Set objButton = objWebTable.ChildItem(intRow, intCol, "WebButton", 0) 您只能按数字指定列。如果您在同一个单元格中有多个按钮,则最后一个参数将生效。
查看我的博客 ( http://automationbeyond.wordpress.com/ ) 中的一些其他技术示例。