DescriptQTP/UFT 中的编程:动态和静态

什么是 Descript编程?

Descriptive 编程用于对 AUT 中的对象执行操作,该对象的定义未存储在对象存储库中。使用此机制,您可以绕过对象存储库的识别并提供对象 Descript声明本身中的离子。

对象名称仅用于将脚本中的对象与对象存储库中的描述进行映射。 这意味着如果你在脚本和对象存储库中更改对象名称,脚本应该运行。观看以下关于此概念的视频

点击 点击这里 如果视频无法访问

视频集锦

  • 删除对象 Descript特工名称获胜编辑 Box 从对象存储库中获取。如果再次运行测试,它将失败,因为它无法识别该对象。让我们检查一下脚本失败的原因
  • 在运行时,Micro Focus UFT 识别在 WinEdit 框和对象上执行的操作 Descript对象存储库中的对象名称存储为代理名称。它使用此名称来跟踪对象存储库中的对象。对于父对象,不能有两个同名的子对象。因此,QTP 唯一地映射存储库中的对象。然后,它使用对象存储库中存储的描述,并用描述替换名称。然后,它使用此语句来识别被测应用程序中的对象
  • 由于在我们的例子中我们已经删除了这个对象描述,脚本失败
  • 但是,如果不是使用 QTP 替换对象描述,而是作为测试人员的您直接在脚本中指定对象描述,情况会怎样呢? 这不过是“Descript实战编程”

有哪些 Descript实战编程

您可以使用 Descript两种编程方式

  1. 静止
  2. 动态

静止 Descript实战编程

在静态方法中,为了识别对象,可以使用以下格式指定对象的属性

property:=values,

这种格式称为属性值对,并用引号括起来

如果你的对象使用 为便于识别,可以使用逗号指定多个描述

因此,在我们的例子中,代理名称的描述变为

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

动态 Descript实战编程

执行相同操作的第二种方法是使用动态 Descript实战编程

如果你的脚本多次使用描述性编程对象候选,那么为每个语句指定所有属性值对将非常繁琐

在这种情况下,您可以使用 Descript离子类别 由QTP提供

语法 创建描述对象的方法是

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

这是 动态法

为何使用 Descript编程?

视频抄本

  • 价值百万美元的问题是,当对象识别过程由 QTP 处理时,为什么要使用 DP
  • 假设你被指派去测试一个求职门户网站。你在门户网站中输入一个搜索查询,然后
  • 您的测试需要您选择所有可用的工作,然后单击“申请工作”
  • 但反映的工作数量将取决于脚本执行时的搜索查询和可用的工作,但无法提前预测将反映的工作数量
  • 在这种情况下,您可以使用描述性编程。即使您不知道复选框的数量和名称,您也知道对象的类是“WebCheckBox=
  • 您可以使用 ChildObject 方法 返回属于特定父级的对象
  • 如下一行代码 –
    Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
  • 将返回此页面的所有子对象。
  • 但我们只想要 WebCheckBox 对象。为此,我们可以创建一个过滤器创建对象,并将其属性设置为 Web 复选框,并将此过滤器作为 ChildObjects 方法的参数传递
  • 在这种情况下,仅返回复选框。
  • 接下来,您可以编写这样的代码,从零开始访问整个复选框集合并将所有复选框设置为 ON。
  • 接下来,您可以点击应用按钮完成测试
  • 您还可以使用 Descriptive 编程来运行难以记录的对象,如自动隐藏面板、具有不断变化的层次结构的对象、嵌套的内部对象、子菜单。
  • 您还可以使用描述性编程进行高级字符串操作
  • 结合索引属性,描述性编程对于识别困难对象非常有用。
  • 如果你对对象层次结构中的对象使用编程描述,则需要对后续子对象使用描述编程
  • 例如,对于页面对象,使用了描述性编程,但对于后续子对象,使用了 WinEdit 对象存储库,这是不正确的
  • 相反,这里对于 Page 和 WinEdit 都使用了描述性编程,这是正确的