我想使用动态对象识别(描述性编程)来找到在某些给定文本之后出现的标记为“删除”的第一个按钮(例如,在文本“项目XYZ-123”之后出现的第一个删除按钮)。如果文本和按钮都在webtable的单行内,我有一个很好的方法,但我希望有一个更优雅或更可靠的解决方案(希望不会依赖于表格)。
我宁愿避免使用.Object属性,因为文档声称.Object属性只在IE中测试时返回DOM对象,而不是在firefox中。
谢谢!
答案 0 :(得分:1)
假设没有更简单的方法,您可以尝试解析HTML。在HTML中查找搜索文本,然后从该点开始搜索HTML以获取“删除”按钮。您应该能够从HTML中提取id或其他标识属性,以用于描述性编程。
您是否有我们可以查看的示例HTML和QTP代码以查看更多详细信息?也许有一种更简单的方法。
答案 1 :(得分:1)
这是一个使用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
有关此解决方案的注意事项:
.*
和/或添加“html标记”以获得更好的效果性能。
BODY
等。ChildObject
过滤掉WebElement
,假设它们不感兴趣。答案 2 :(得分:0)
首先让我重新解释一下这个问题。
如果行号未知但是您有唯一的键值来查找行,如何检索对WebTable中包含的对象的引用?
这适用于按钮,复选框,组合框和表格中的任何其他对象。
实现。
1)找到行
intRow = objWebTable.GetRowWithCellText(sKeyValueText,“Item”) 您可以按名称或编号指定列
2)后退子对象
设置objButton = objWebTable.ChildItem(intRow,intCol,“WebButton”,0) 您只能按编号指定列。如果在同一单元格中有多个按钮,则最后一个参数生效。
查看我博客中的其他一些技术示例(http://automationbeyond.wordpress.com/)。