2

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

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

谢谢!

4

3 回答 3

1

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

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

于 2009-06-04T14:22:37.207 回答
1

这是一个使用该sourceIndex属性的解决方案,请注意这sourceIndex是一个仅限 IE 的属性,但 QTP 在 Firefox 上模拟它,因此相同的脚本将在两个浏览器上运行。您可以选择使用基于坐标的属性,例如abs_xabs_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等。
  • 在文本的描述中,我们必须指定“micclass”=“WebElement”,因为默认情况下会ChildObject过滤掉WebElements 假设它们不感兴趣。
于 2009-06-07T08:04:14.033 回答
0

让我先重新表述一下这个问题。

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

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

执行。

1) 查找行

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

2) 检索子对象

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

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

于 2009-07-13T18:42:14.330 回答