### QTP从零学起之八描述性编程
#### 一、描述性编程的作用与应用场景
**描述性编程**是Quick Test Professional (QTP) 中一种重要的自动化测试技术,它允许用户通过描述对象而非直接引用对象来执行操作。这对于那些没有被记录在对象库中的元素特别有用,并且能够提高脚本的灵活性和可维护性。
##### 1. 为什么使用描述性编程?
- **未存储在对象库中的对象**:有时,我们可能需要与那些并未保存在对象库中的对象交互。在这种情况下,描述性编程就成为了一个理想的解决方案。
- **多个相似对象**:当需要在多个具有相同属性的对象上执行同样的操作时,使用描述性编程可以简化代码并避免重复编写相同的测试步骤。
- **动态属性**:对于那些属性值在运行过程中可能会发生变化的对象,描述性编程提供了动态确定这些属性的能力。
#### 二、描述性编程的基础知识
描述性编程主要有两种形式:
1. **直接在语句中输入编程描述**:这是一种较为简单的使用方式,通过在脚本中直接指定对象的属性及其值来识别对象。例如:
```vb
Browser("MyBrowser").Page("MyPage").WebEdit("id:=username").Set "myUsername"
```
这里`WebEdit("id:=username")`就是一个描述性编程的例子,它告诉QTP根据`id`属性为`username`的WebEdit控件执行`Set`方法。
2. **使用Description对象**:这种方式更加灵活和高级,通过创建一个`Description`对象并为其添加属性和值来构建对象的描述。例如:
```vb
Set desc = Description.Create()
desc("Class").Value = "WebEdit"
desc("id").Value = "password"
Browser("MyBrowser").Page("MyPage").TestObject(desc).Set "myPassword"
```
#### 三、描述性编程的其他应用场景
1. **检索ChildObjects**
- 使用`ChildObjects`方法可以根据特定的描述性编程描述检索父对象下的子对象。例如:
```vb
Set desc = Description.Create()
desc("Class").Value = "WebLink"
Set subSet = Browser("MyBrowser").Page("MyPage").ChildObjects(desc)
```
2. **使用WebElement对象**
- 当需要在不适合使用对象类的Web对象上执行方法时,可以使用`WebElement`对象。例如:
```vb
Browser("MercuryTours").Page("MercuryTours").WebElement("Name:=UserName","Index:=0").Click
```
3. **使用Index属性**
- 在某些情况下,我们需要根据对象的索引来定位它们。例如:
```vb
Browser("MyBrowser").Page("MyPage").WebButton("Index:=1").Click
```
4. **运行和关闭应用程序**
- 描述性编程也可以用来打开或关闭应用程序。例如:
```vb
Application("Notepad").Menu("File").MenuItem("Exit").Click
```
5. **使用描述性编程处理对话框**
- 对于弹出的对话框,可以通过描述性编程来控制。例如:
```vb
Dialog("text:=Login","nativeclass:=#32770","isownedwindow:=False","ischildwindow:=False").WinButton(“text:=OK").Click
```
#### 四、总结
描述性编程是QTP中非常强大的功能之一,它不仅提高了测试脚本的灵活性和适应性,还能有效减少脚本维护的工作量。通过本文的学习,相信读者已经掌握了描述性编程的基本概念和应用场景,并能够熟练地在实际项目中运用这一技术。在未来的学习和实践中,不断探索和尝试更多描述性编程的应用,将会让你的自动化测试技能更上一层楼。