QTP/UFT中的描述性编程:动态与静态

什么是描述性编程?

描述性编程用于在AUT中对其定义未存储在对象存储库中的对象执行操作。使用该机制,可以绕过来自对象存储库的标识,并在语句本身中提供对象描述。

对象名称仅用于将脚本中的对象与其在对象存储库中的描述进行映射。例如:

  • 从对象存储库中删除Agent Name Win Edit Box的对象说明。检查一下脚本失败的原因
  • 在运行时,Micro Focus UFT识别在WinEdit框上执行的操作,并将对象存储库中的对象描述存储为代理名称。然后使用此语句标识被测应用程序中的对象
  • 因为在我们的示例中,我们已经完全删除了此对象描述,所以脚本失败
  • 但是,如果作为测试人员直接在脚本中指定对象描述而不是QTP替换对象描述会怎么样呢?这就是“描述性编程”。

描述性编程的类型

可以通过两种方式使用描述性编程

  1. 静态类型
  2. 动态类型

静态描述性类型

在静态方法中,对于对象标识,可以按以下格式指定对象的属性

property:=values,

此格式称为属性值对,并用反逗号括起来。如果对象使用多个描述进行标识,则可以使用逗号指定这些描述。因此,在我们的示例中,Agent Name的描述变为

"nativeclass:=Edit", "attached text:=Agent Name:"

动态描述性类型

执行相同操作的第二种方法是使用动态描述性编程,如果脚本多次使用描述性编程对象候选,则为每条语句指定所有属性值对将非常麻烦,在这种情况下,可以使用QTP提供的描述类。

创建描述对象的语法为

Set MyDescription = Description.Create();
MyDescription("property").Value = "property-value";

这就是动态方法

为什么要使用描述性编程?

如下示例:

  • 价值百万美元的问题是,当对象识别过程由QTP处理时,为什么要使用DP
  • 假设被指派测试一个工作门户。在门户中输入搜索查询,然后
  • 测试要求选择所有可用作业,然后单击应用作业
  • 但反映的作业数将取决于搜索查询和脚本执行时可用的作业,但无法预先预测将反映的作业数
  • 在这种情况下,可以使用描述性编程。即使不知道复选框的数量和名称,也知道对象的类是“WebCheckBox”
  • 可以使用ChildObject方法返回属于特定父级的对象
  • 一行代码,如-
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()

将返回此页的所有子对象。 但是我们只需要WebCheckBox对象。可以创建一个过滤创建对象,并将其属性设置为Web复选框,然后将此过滤作为ChildObjects方法的参数传递。在这种情况下,只返回复选框。

接下来,可以编写如下代码,该代码从零开始访问整个复选框集合,并将所有复选框设置为打开。 然后,可以单击Apply按钮完成测试。还可以使用描述性编程来运行难以记录的对象,如自动隐藏面板、具有变化的层次结构的对象、嵌套的内部对象、子菜单。 还可以使用描述性编程进行高级字符串操作。

结合索引属性,描述性编程在识别困难对象时很有用。 如果对对象层次结构中的对象使用编程描述,则需要对后续子对象使用描述编程。例如,对于页面对象,使用了描述性编程,但是对于后续子对象,使用了WinEdit对象存储库,这是不正确的。相反,这里对于Page和WinEdit都使用描述性编程,这是正确的

IT赶路人

专注IT知识分享