(转)QTP常用功能及问题解答

上一篇 / 下一篇  2009-07-30 18:18:46 / 个人分类:qtp

1、  定义变量:Dim 变量名;

2、  弹出对话框:MsgBox 显示内容(也可以是变量名);

3、  延时:wait 10;  ——延时10秒

4、  赋值:变量名 = 赋值内容;

5、  循环语句:(可用于对变量的参数化)

For i=1 to 2

Browser("用户登陆").Page("后台管理").Frame("leftFrame").Link("展开").Click

Browser("用户登陆").Page("后台管理").Frame("leftFrame").Link("信息发布管理").Click

Browser("用户登陆").Page("后台管理").Frame("mainFrame").Image("add-an").Click

Browser("用户登陆").Page("后台管理").Frame("mainFrame_2").WebList("infotype").Select "新闻类型"

Browser("用户登陆").Page("后台管理").Frame("mainFrame_2").WebList("scolumncode").Select DataTable("colum", dtLocalSheet)

Browser("用户登陆").Page("后台管理").Frame("mainFrame_2").WebEdit("sauthor").Set DataTable("author", dtLocalSheet)

Browser("用户登陆").Page("后台管理").Frame("mainFrame_2").WebEdit("stitle").Set DataTable("title", dtLocalSheet)

Dim aa

 

Select Case i

Case 1 aa = "aa111111"

        Case 2 aa = "bb222222"                                                                                          

End Select

Browser("用户登陆").Page("后台管理").Frame("Frame").WebElement("html tag:=BODY").object.innerText = aa

Browser("用户登陆").Page("后台管理").Frame("mainFrame_2").WebButton("imageField3").Click

NEXT

 

6、  Qtp除了根据对象库中对象来识别外,还可以采用描述性编程的方法识别对象,例如可以通过一下方法识别webEditor的编辑框(以信息发布系统为例):

Browser("用户登陆").Page("后台管理").Frame("Frame").WebElement("html tag:=BODY")

注:如果父对象采用了描述性编程方法,其子对象也必须采用描述性编程方法

 

7、  QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口(详见QTP识别和操作对象原理)。由于qtp没有对WebEditor的编辑框赋值方法进行封装,即SetTOProperty对其无效,所以我们可以对WebEditor自身属性直接赋值,如:Browser("用户登陆").Page("后台管理").Frame("Frame").WebElement("html tag:=BODY").object.innerText = “新闻内容……”

 

8、  当发现录制完的脚本有这样的提示时:

 

只需按以下步骤设置即可:

点击【tools】à【option】à【Active Screen】à【Advanced】à勾选“Load ActiveX Controls”à点击【ok】保存即可,具体操作如下图所示。

1、  我机器的qtp启动时如果选择加载Active X,启动后IE无法运行,这个问题一直没有找到解决的办法,但不影响在Web程序下使用。期间按照网上建议的各种办法操作都无效,后来用雅虎助手修复IE后,加载ActiveX启动后IE可以正常运行,但qtp不能正常工作,不得不重装qtp,但重装qtp又出现了多个模块无法注册的错误,实践证明重装时忽略这些错误不影响qtp正常工作。无法注册的原因可能是那些dll文件已经存在于memory

2、  要弄清楚当前对象采用的是什么事件,例如信息发布系统的时间控件,年份列表的翻页事件采用的onmousedown(),而不是onclick(),可以通过spy或对象库查看该对象innerhtml属性值,通常能反映出当前对象采用的事件

这个例子中,onmousedown后还必须执行一次onmouseup事件,否则会出现不断翻页或连续翻两页的情况

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebElement("decYear").Object.onmousedown (decYear为对象库中向前翻页按钮的对象名称)

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebElement("decYear").Object.onmouseup

 

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebElement("addYear").Object.onmousedown (decYear为对象库中向前翻页按钮的对象名称)

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebElement("addYear").Object.onmouseup

 

11、可以对对象属性值进行参数化                

Dim aa

aa="y2"

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebTable("-").WebElement("html id:="&aa).Click

 

12、采用描述性编程时可以同时用多个属性来识别一个对象,如下所示

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebTable("-").WebElement("html tag:=TD", "innertext:=-").Object.onmousedown

Browser("用户登陆").Page("后台管理").Frame("mainFrame").WebTable("-").WebElement("html tag:=TD", "innertext:=-").Object.onmouseup

10~12参见测试脚步search_file02

 

 

定制对象事件

      大部分情况下,我们使用QTP封装后的事件就可以了。但是在某些情况下,我们需要在QTP对象上执行一些特殊的操作,这时我们希望能够有某种手段能够定制对象事件,QTP的RegisterUserFunc为我们提供了这种功能。

1.注册新方法

Function SetDefaultValue(test_object, ByVal val)

  If StrComp(val, "") = 0 Then

        test_object.Set "default"

  Else

     test_object.Set val

  End If

End Function

RegisterUserFunc "WebEdit", "SetDefaultValue", "SetDefaultValue", TRUE

 

Browser("Google").Page("Google").WebEdit("q").SetDefaultValue ""

Browser("Google").Page("Google").WebEdit("q").Submit

 

上面这段代码在WebEdit对象注册了一个新的方法SetDefaultValue

 

2. 修改老方法

Function SetDefaultValue(test_object, ByVal val)

  If StrComp(val, "") = 0 Then

        test_object.Set "default"

  Else

     test_object.Set val

  End If

End Function

RegisterUserFunc "WebEdit", "Set", "SetDefaultValue", TRUE

 

Browser("Google").Page("Google").WebEdit("q").Set ""

Browser("Google").Page("Google").WebEdit("q").Submit

这段代码定义了SetDefaultValue方法并替换了以前的Set方法。

 

如何访问DOM对象和方法(描述性编程)

 

前文提到描述性编程时有QTP Object和Dom Object之说,这两个到底有什么区别呢?所谓QTP Object包括TO和RO都是被QTP封装后的对象,而DOM Object和QTP没有什么关系。我们知道Html是一种结构化的语言,而Html Dom定义了访问和操作HTML文档的标准方法,DOM Object指的通过DOM接口访问的HTML文档对象。那QTP如何获取DOM Object?很简单,只要通过Object属性就可以使用DOM接口访问这些对象。例如下面这段话就是通过DOM接口访问Input对象,并直接将输入框的value值赋值为abc,相当于QTP WebEdit对象的Set方法:

      Browser("Google").Page("Google").WebEdit("q").Object.value = "abc"

 

       那什么时候会用到DOM Object?怎么用呢?

     用QTP时,大家会发现有不少的对象QTP经常抓取不下来。例如某个Html代码中DIV中套用了DIV:

      

             

                    

             

大家可以试试,如果用QTP本身的对象抓取功能,如果想把两个DIV层都抓取下来非常困难,如果对象都抓取不了,就更不要提后续的操作了。但如果用DOM接口去操作就会灵活的多,DOM将HTML结构视为一棵树,每个HTML文档元素及其属性是树上一个节点,可以用getElementById直接访问它们,也可以通过childNodes属性一层一层的访问。下面是一段范例代码:

'获取childDIV对象

Set ōbj = Browser("Browser").Object.Document.getElementById("childDIV")

'获取childDIV的子节点

    Set co = obj.childNodes

'childDIV的子节点为input对象

    Set inputObj = co(0)

'设置input文本框的内容为aa

    co(0).value = "aa"

 

当然这些通过QTP Object的描述性编程也是可以做到的。关于Html Dom的详细介绍可以到这个网址看看:http://www.w3school.com.cn/htmldom/index.asp

 

 

More About 描述性编程

Object属性通过DOM提供了一种直接访问Web元素属性的途径。除此之外QTP还支持一种直接访问Web元素属性的方式,就是attribute/[属性]的方式。

例如有一段源代码如下:

微软出的ie插件,可以查看每个html文档元素的结构及属性,包括css样式,操作简洁,功能完全可以弥补QTP对象识别的不足。如下图:

不过有点遗憾的是,QTP对于Object属性有这样一个说明“TheObjectproperty for Web objects is supported only when running steps on Internet Explorer.  It is not supported when working with Netscape Browser or Mozilla Firefox”,看来QTP只支持IE对于DOM Object的访问。


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-03  
   1234
567891011
12131415161718
19202122232425
262728293031 

我的存档

数据统计

  • 访问量: 6422
  • 日志数: 7
  • 建立时间: 2009-07-27
  • 更新时间: 2009-07-30

RSS订阅

Open Toolbar