Quicktest Pro - 匹配文本后找到第一个按钮

时间:2009-06-03 22:10:47

标签: automated-tests qtp

我想使用动态对象识别(描述性编程)来找到在某些给定文本之后出现的标记为“删除”的第一个按钮(例如,在文本“项目XYZ-123”之后出现的第一个删除按钮)。如果文本和按钮都在webtable的单行内,我有一个很好的方法,但我希望有一个更优雅或更可靠的解决方案(希望不会依赖于表格)。

我宁愿避免使用.Object属性,因为文档声称.Object属性只在IE中测试时返回DOM对象,而不是在firefox中。

谢谢!

3 个答案:

答案 0 :(得分:1)

假设没有更简单的方法,您可以尝试解析HTML。在HTML中查找搜索文本,然后从该点开始搜索HTML以获取“删除”按钮。您应该能够从HTML中提取id或其他标识属性,以用于描述性编程。

您是否有我们可以查看的示例HTML和QTP代码以查看更多详细信息?也许有一种更简单的方法。

答案 1 :(得分:1)

这是一个使用sourceIndex属性的解决方案,请注意sourceIndex是仅IE的属性,但QTP在Firefox上模拟它,因此相同的脚本可以在两个浏览器上运行。如果abs_x不适合帐单,您可以选择使用基于坐标的属性,例如abs_ysource_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等。
  • 在文字说明中,我们必须指定“micclass”=“WebElement”,因为默认情况下ChildObject过滤掉WebElement,假设它们不感兴趣。

答案 2 :(得分:0)

首先让我重新解释一下这个问题。

如果行号未知但是您有唯一的键值来查找行,如何检索对WebTable中包含的对象的引用?

这适用于按钮,复选框,组合框和表格中的任何其他对象。

实现。

1)找到行

intRow = objWebTable.GetRowWithCellText(sKeyValueText,“Item”) 您可以按名称或编号指定列

2)后退子对象

设置objButton = objWebTable.ChildItem(intRow,intCol,“WebButton”,0) 您只能按编号指定列。如果在同一单元格中有多个按钮,则最后一个参数生效。

查看我博客中的其他一些技术示例(http://automationbeyond.wordpress.com/)。