前言:最近从开发转到了自动测试,反正正在实习,有大把的时间。所以也乐于转型。而且,我还碰到了我的公司中的老师,亲爱的秦哥哥。但愿这一年的实习期能让我真正的掌握QTP的运行。
QTP,用VB。哈哈。好开心的。因为VB不支持继承,多态。那怎么面向对象呢?
QTP中,可以用描述性编程来识别一个对象,这就让我有了抛弃控件库,使用完全的面向对象的方式NEW出一个又一个的控件来的想法。
描述:很简单,模拟在一个 javaWindow(一个普通的窗口) 中的 用户名(javeEdit )控件 密码 (javaEdit) 控件中输入相应的用户名和密码。
首先,我们要有一个类,这个类可以从系统中通过 title,定位到一个 javaWindow对象。因为javaWindow中,有可能有很多子控件,比如文本框(javaEdit) 按钮之类的。方便演示起见,只写了一个函数,那就是 通过子文本框的attachedtext属性获取子文本框实体。可以按需再进行添加N多的方便的方法。以完善这个类。
Class ClassJavaWindow
'定义一些变量
private m_JavaWindow
Private m_ChildEdit
rem 根据title定义窗口实例
Public function SetJavaWindow(title)
set m_JavaWindow=JavaWindow( "title:=" &title)
End function
rem 方法,获取该窗口中的一个edit 的类对象,不是系统的javaEdit对象
public function GetChildEdit(attachedtext)
Set m_ChildEdit= new ClassJavaEdit
m_ChildEdit.SetJavaEdit m_JavaWindow,attachedtext
set GetChildEdit=m_ChildEdit
End function
End Class
主类写好了。在这个类中,函数只是创建出了一个新的对象,然后在茫茫系统中,通过传入的值找到这个控件。值得注意的是,像button,javaEdit之类的控件,是必须指定一个父控件的。为什么不言而喻,因为这些东西本来就需要一个载体。
子类很简单,就是通过传入的父对象和 attachedtext属性,寻找到当前系统的这个控件。
Class ClassJavaEdit
Private m_JavaEdit
rem 根据父窗口和attachedText定义寻找实例
Public function SetJavaEdit(parent,attachedtext)
set m_JavaEdit=parent.JavaEdit( "attached text:=" &attachedtext)
End function
rem 只读属性:返回自身
Public Property Get ItSelf
set ItSelf = m_JavaEdit
End Property
End Class
然后,就是调用了。调用很简单。在login window中的 user: 和 password: 框中输入密码。
rem 新建一个类 ,然后传入值user login ,创建这个对象窗口
Set testWindow= new ClassJavaWindow
testWindow.SetJavaWindow( "User Login" )
rem 定义用户名输入框,直接通过窗口类的方法创建对象。
Dim editUser
set editUser=testWindow.GetChildEdit( "User:" )
rem 定义密码输入框
Dim editPwd
set editPwd=testWindow.GetChildEdit( "Password:" )
rem 这个对象的ItSelf是货真价实的javaEdit。而且是user login的子控件,自然可以使用系统的set 方法用来设置值。
editUser.ItSelf. set "yinzihao"
editPwd.ItSelf. set "yzh"
简化后的代码就是:
Set testWindow= new ClassJavaWindow
testWindow.SetJavaWindow( "User Login" )
testWindow.GetChildEdit( "User:" ).ItSelf. set "yinzihao"
testWindow.GetChildEdit("Password:").ItSelf.set "yzh"
才学了5天VB,对面向对象也不太熟悉,等我回去把重构再看一遍,参考一些其它的自动化测试框架。到时再慢慢架构一下。