0

我在选择 Web 列表框时在 QTP 中遇到问题,我已经用尽我所知道的方法来解决它。我希望有人可以提供帮助。

一个容器中有5个控件,2个webedit控件和3个weblist控件。它们一起允许输入与客户关联的帐户,并且任何客户都可以有 16 个帐户。任何时候只有五个控件处于活动状态,无论是编辑还是输入帐户信息。输入并接受帐户信息后,它会变为只读表格行,并且在其下方出现一组新控件,用于输入下一个帐户。

在这些控件中输入的信息是帐号、类型、描述、名称和状态。状态值取决于指定,并且列表中的项目根据用户为指定指定的内容而动态变化。在指定指定之前,不会启用状态列表。

经过一些时间试验后,我能够解决一个问题,即第一个帐户的状态列表被 QTP 视为已禁用,即使它已明确启用。然后我可以进入第二个帐户。

我更改了第二个帐户的名称,并尝试在状态列表中选择适当的项目(在数据表中指定)。我从未找到数据表中的规范。我认为这是措辞差异的问题,而且我可能应该预料到这个问题并现在解决它,所以我编写了一个函数来接受三个参数、列表和最多两个搜索项。我的函数搜索传递给它的列表框,并在它收到的搜索项上查找匹配项(全部或部分)。这是我遇到一个重大问题的地方。

我的函数收到的控制列表来自上一次测试迭代,对应于该帐户的指定。这就是为什么我的函数没有找到选择项的原因。屏幕上的列表显示了相应的项目,这表明我正在查看错误的对象。当我使用 select 语句将数据表值直接放入列表时,也会收到“对象已禁用”消息。

活动控件显示在先前输入帐户的只读表示下方。我对 QTP 很陌生,但我也阅读了文档。在这一点上,我唯一的理论是 ATP 没有将正确的列表传递给我的函数……也许它是如何学习的,包括位置,每次都会改变。但是,间谍将屏幕控制识别为我为前一个帐户处理的同一项目,这使我的理论受到怀疑。此外,其他四个不是动态变化的控件也不存在同样的问题。我可以始终如一地将信息放入其中。

对于这个问题的长度,我深表歉意,但我想尽可能彻底和清楚。谁能帮我克服这个障碍。

4

2 回答 2

0

我今天早上很早就想通了。使用了 4 个不同的列表框,每个列表框都是可见或启用的,具体取决于前一个列表的选择。这就是为什么间谍在我使用它时发现了列出的项目,以及为什么列表中的项目不适合我选择的项目,以及为什么它似乎对 QTP 禁用但对我启用。

我在尝试监视它时选择了相同的名称。很直观,控件都是一样的。我也是一名 Windows 程序员,每次我都会用适当的列表项填充同一个列表,我认为这就是 Web 开发人员正在做的事情。事实并非如此,而且花了一些时间才弄清楚。现在我弄清楚了,一切正常,我回来报告。这是一堂重要的、耗时的课程。

非常感谢您的意见。它仍然很有用,因为我对 QTP 很陌生,我学到的每一件事都是有价值的。

于 2013-04-15T14:39:16.293 回答
0

它暴露这种行为的原因有很多,所以让我们从简单的事情开始:

  • 在对列表框进行操作之前,您是否尝试过myWebList.Refresh通话?Refresh重新识别对象。
  • 您是否在自定义函数中放置了一个断点(红点)。看看那里发生了什么。使用调试查看器,您可以在该功能范围内输入实时命令,例如msgbox myWebList.exist(0)myWebList.Highlight
  • 你能看到 disabled 属性是如何传播到网页的吗?如果您可以将其“对象间谍”作为 TO 属性,则可以将其添加到 GUI 地图描述中。
  • Description一种更复杂的方法是使用 weblist 属性创建一个。如果您可以disabled从“Object Spy”中将该属性读取为 RO 属性,则可以将其用作标识符,例如"attribute/customDisabledProperty:=false".
  • 如果您无法正确读取 disabled 属性,您可以创建一个描述对象并计算与该页面上的描述匹配的项目数量,numberOfLists = Browser("my browser").Page("my page").ChildObjects(myDescription).Count并获取最后一个列表Set lastList = Browser("my browser").Page("my page").ChildObjects(myDescription)(numberOfLists-1)

随时通知我们。根据结果​​如何,我们可以找到解决方案的方向。

于 2013-04-15T12:42:49.887 回答