DescriptQTP/UFT 中的编程:动态和静态
什么是 Descript编程?
Descriptive 编程用于对 AUT 中的对象执行操作,该对象的定义未存储在对象存储库中。使用此机制,您可以绕过对象存储库的识别并提供对象 Descript声明本身中的离子。
对象名称仅用于将脚本中的对象与对象存储库中的描述进行映射。 这意味着如果你在脚本和对象存储库中更改对象名称,脚本应该运行。观看以下关于此概念的视频
点击 点击这里 如果视频无法访问
视频集锦
- 删除对象 Descript特工名称获胜编辑 Box 从对象存储库中获取。如果再次运行测试,它将失败,因为它无法识别该对象。让我们检查一下脚本失败的原因
- 在运行时,Micro Focus UFT 识别在 WinEdit 框和对象上执行的操作 Descript对象存储库中的对象名称存储为代理名称。它使用此名称来跟踪对象存储库中的对象。对于父对象,不能有两个同名的子对象。因此,QTP 唯一地映射存储库中的对象。然后,它使用对象存储库中存储的描述,并用描述替换名称。然后,它使用此语句来识别被测应用程序中的对象
- 由于在我们的例子中我们已经删除了这个对象描述,脚本失败
- 但是,如果不是使用 QTP 替换对象描述,而是作为测试人员的您直接在脚本中指定对象描述,情况会怎样呢? 这不过是“Descript实战编程”
有哪些 Descript实战编程
您可以使用 Descript两种编程方式
- 静止
- 动态
静止 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 都使用了描述性编程,这是正确的