我快乐,不是因为我得到的多,而是因为我计较的少

发布新日志

  • 编辑框WebFile无法set的解决方法

    2009-08-23 19:28:31

    一.出处

    最近一个同事写qtp时候遇到问题:后台发布spu,QTP录制脚本时,上传本地图片,脚本可以录制出来,但上传路径只能选择录入,不支持从键盘输入.在脚本回访时,Set方法不能被执行,导致上传本地文件失败.怎么解决呢

    问题脚本代码:

    Browser(“taobao”).Page(”Taobao-CRM_2″).Frame(”mainFrame_3″).WebFile(”editor_image”).Set “F:\document\图片\da4b4633-5e6c-4dfa-a38f-5d4e800856d5.jpg”

    二.解决方法

    1.       解决把上面那句代码替代为:

    Browser(“taobao”).Page(”Taobao-CRM_2″).Frame(”mainFrame_3″).WebFile(”editor_image”).click

    Browser(“taobao”).Dialog(”选择文件“).WinEdit(”文件名(N):”).Set “F:\document\图片\da4b4633-5e6c-4dfa-a38f-5d4e800856d5.jpg

    Browser(“taobao”).Dialog(”选择文件“).WinButton(”打开(O)”).Click

    2.       分析

      无法使用set是因为对应对话框被定为不可以赋值方式进行编写;但qtp录制时候还是按赋值录制没有录制弹出窗口这个操作,这时候我们要自己写弹出窗口语句来模拟操作,解决的三局代码就是模拟操作:1.点击按钮;2.在弹出的dialog输入文件名;3.点击确认选择按钮

  • weblist_"#index"

    2009-08-23 17:16:50

    Select Method
    Web Environment

    Select Method

    Description

    Selects the specified item in the list, replacing any previously selected values.

    Syntax

    object.Select Item

    Argument Description
    object A test object of type WebList.
    Item Required. A Variant value. The value to select. The value can either be one of the items in the list or an index. To specify the index of the item to select, use "#index". Index values begin with 0.

    Return Value

    None.  
  • QTP报禁止运行ActiveX控件

    2009-08-23 12:23:31

    在使用QTP期间,大家是否也遇到了经常报“当前安全设置禁止运行该页中的ActiveX控件。。。”的错误信息,怎么解决它:



    如果是录制的时候报这个msg,应该是和IE的设置有关;反之,如果是回放时才有这个msg,考虑qtp的设置问题
    Tools->Options->Active Screen->Advanced...-> 选中Disabled和Load ActiveX controls->OK
  • QTP 参数化

    2008-12-28 16:43:59

    QTP 参数化

    原始脚本录制:
    Browser("LightPole").Page("LoginPg").Sync    '打开LightPole的网站
    Browser("LightPole").Refresh                        '刷新当前页面
    Browser("LightPole").Page("LoginPg").Link("Company").Click       '点击Company链接
    Browser("LightPole").Page("Company").Sync        ' Company链接页面打开
    Browser("LightPole").Close                              '关闭当前页面  

    *******************************

    参数化 (一)
    Dim mylink                            '定义一个变量mylink
    mylink="Press"                        '给这个变量赋值为Press

    Browser("LightPole").Page("LoginPg").Sync
    Browser("LightPole").Refresh
    Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click   '把原来录制脚本时候的链接参数化(用描述性编程"text:="&mylink)
    Browser("LightPole").Page("text:="&mylink).Sync        '可以回避这个页面,对应打开的页面也应该参数化,页面也参数化,和链接保持一致
    Browser("LightPole").Close                    '关闭当前页面

    运行这个脚本就会打开Press链接对应的页面 (注意:在运行脚本的时候把其它的IE窗口关掉,否则的话可能出现对象库为定义的问题) 

    *************************************************

    参数化 (二)   把参数放在QTP自带的Datatable里,然后QTP会循环执行,用datatable里面指定列的每一行参数
    前提:在datatable里面输入指定的参数,参见图片:para.jpg (在发布图片的testing 里,因为我现在在文档里面添加不了图片)
     
    Dim mylink
    mylink=DataTable("A",dtGlobalSheet)    '指定列为A
    Browser("LightPole").Page("LoginPg").Sync
    Browser("LightPole").Refresh
    Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
    Browser("LightPole").Page("text:="&mylink).Sync
    Browser("LightPole").Close
     
    ************************************************************

    参数化(三)
    把excel表格中的数据倒入(import)到QTP的datatable中,制定其倒入的“文件名”,sheet名,把excel的数据导入到本地第几个datatable里

    DataTable.ImportSheet(FileName, SheetSource, SheetDest)
    Datatable.ImportSheet "参数1" ,参数2,参数3
    参数1:要导入的excel文件的绝对路径
    参数2:要导入的excel文件的第几个sheet
    参数3:要导入到本地datatable的第几个表中



    关于一下两个例子的备注说明:

    注1: excel表的内容
    excel:地址d:\\mydata.xls;
    sheet1:                       sheet2:
    mylink                         mylink
    Company                        Blog
    Press
    注2.本地datatable的两个表的名称:1.Golbal ;2.Action1 


    例 1:

    Datatable.ImportSheet "d:\\mydata.xls" ,2,2   '把excel文件中第二个sheet的数据导入到本地第2个datatable的数据表格中
    Dim mylink
    mylink=DataTable("lindk","Action1")   '所以在这里就要调用本地第二个datatable的数据
    msgbox mylink
    Browser("LightPole").Page("LoginPg").Sync
    'Browser("LightPole").Refresh
    Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
    Browser("LightPole").Page("text:="&mylink).Sync
    Datatable.SetNextRow
    Browser("LightPole").Close

    运行结果应该是:Msgbox应该弹出 Blog。
    调用本地的第二个datatable时候,程序不会自动执行循环去遍历所有的参数,此时需要使用循环语句,判断本地其他数据表中数据的个数(遍历次数);只有在本地的Global中的数据才能自动遍历执行。


    例2:


    Datatable.ImportSheet "d:\\mydata.xls" ,1,1    '把excel文件中第一个sheet的数据导入到本地第二个datatable的数据表格中
    Dim mylink
    mylink=DataTable("lindk",dtGlobalSheet)    '所以在这里就要调用本地第二个datatable的数据
    msgbox mylink
    Browser("LightPole").Page("LoginPg").Sync
    'Browser("LightPole").Refresh
    Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
    Browser("LightPole").Page("text:="&mylink).Sync
    Datatable.SetNextRow
    Browser("LightPole").Close

    运行结果因该是:Msgbox应该弹出 Company,再一遍弹出Press。

  • QTP之顺序标识符

    2008-12-07 16:41:51

    QTP之顺序标识符

    众所周知,QTP是根据对象的属性及属性值去识别对象的,但有时仅仅有强制属性和辅助属性是不够的,这就需要加上顺序标识符来唯一描述对象。今天学习一下关于顺序标识符的知识,希望大家一起讨论!# b8 i! }& v! U& H

    & }- d1 n5 G! U: Z# e5 mQuickTest 可以使用三种类型的顺序标识符来标识对象: 3 S7 y% l% a& D" H
    • 索引 - 指示该对象在应用程序代码中相对于其他描述都相同的其他对象的显示顺序。
    • 位置 - 指示该对象在父窗口、框架或对话框中相对于其他描述都相同的其他对象的显示顺序。
    • CreationTime(仅限于浏览器对象)- 指示该浏览器打开的顺序,相对于其他描述都相同的其他打开的浏览器。

    % t0 u% j; z7 {3 u) X2 X" L
    + {4 c& o7 m2 l  u' i3 N# I4 o+ G. w( I/ m5 @% j' C1 [" O
          默认情况下,每个测试对象类的顺序标识符都被选中。要修改选定的顺序标识符,请从“顺序标识符”框中选择所需的类型。(Tools--->Object Identification打开)3 G) P& b7 G2 C9 B% x
    $ V( G6 |3 t# H1 _3 ]: T( e9 R8 P
                                                          
    # W! r' l; a1 {% u1 w1 n/ p6 D0 ~. l* T' }

    3 K" I" ~* X) U( P: {
         如果 QuickTest 在录制时使用强制和辅助属性成功地创建了唯一的测试对象描述,则不会录制顺序标识符值。您可以在以后使用“对象属性”或“对象库”对话框中的“添加/删除”选项,向对象的测试对象属性中添加顺序标识符。
    ( r! r' V/ W1 L. g* t5 u! X( V0 e

    5 Q5 F  i# g; v

    3 ]- r3 h. H" m使用索引属性标识对象
         在录制期间,QuickTest 可以为对象的 Index 测试对象属性分配一个值,以便唯一标识该对象。该值基于对象在源代码中的显示顺序。第一个出现的是 0。 注意,Index 属性值是特定于对象的。因此,如果使用 Index:=3 描述 WebEdit 测试对象,QuickTest 将在页中搜索第四个 WebEdit 对象。但是,如果使用 Index:=3 描述 WebElement 对象,QuickTest 将在页中搜索第四个任何类型的 Web 对象,因为 WebElement 对象适用于所有 Web 对象。 ' w8 S6 s; U/ `" c' o
    5 Q  x) c9 q. q# W0 n
    例如,假定页中有下列对象: 2 m* [& G0 Z( u
    • 名为 Apple 的图像
    • 名为 UserName 的图像
    • 名为 UserName 的 WebEdit 对象
    • 名为 Password 的图像
    • 名为 Password 的 WebEdit 对象
      _8 R" q# ]0 Q+ Y
    下面的描述引用了上述列表中的第三项,因为它是页中第一个名为 UserName 的 WebEdit 对象。
    / X4 R+ c# Q: qWebEdit("Name:=UserName", "Index:=0")
    2 ~/ {' N" o( J, a. b4 j" k% X" c5 y8 A0 @2 q2 T/ J
    但是,下面的描述引用的是上述列表中的第二项,因为它是第一个名为 UserName 的、任何类型 (WebElement) 的对象。 . B2 p  v' K# R; H
    WebElement("Name:=UserName", "Index:=0")
    * {# z% T+ w8 H) Q
    使用位置属性标识对象
    在录制期间,QuickTest 可以为对象的 Location 测试对象属性分配一个值,以便唯一标识该对象。该值基于对象在窗口、框架或对话框中相对于具有相同属性的其他对象的显示顺序。第一个出现的对象是 0。各列值的分配从上到下、从左到右。 % y9 H; v0 n7 i: _
    例如,下面的对话框中的单选按钮按照其位置属性编号。
    9 m, k- _  h; b  Z1 N( V$ P6 }8 x% W
                                 
    3 ]# L  N5 a7 j9 s7 R
    ; ~  F% X7 l8 t, O( a注意,Location 属性值是特定于对象的。因此,如果使用 Location:=3 描述 WinButton 测试对象,则 QuickTest 在该页从上到下、从左到右搜索第四个 WinButton 对象。 但是,如果使用 Location:=3 描述 WinObject 对象,则 QuickTest 在该页中从上到下、从左到右搜索第四个任何类型的标准对象,因为 WinObject 对象适用于所有标准对象。
    2 F' P. @9 o( H7 _! {6 S. r
    例如,假定对话框中有下列对象:
    5 p3 V/ ?+ E% Z! A& |' b: E7 Q- [7 k* b
    • 名为 OK 的按钮对象
    • 名为 Add/Remove 的按钮对象
    • 名为 Add/Remove 的复选框对象
    • 名为 Help 的按钮对象
    • 名为 Check spelling 的复选框对象

    # B3 _! a. D; D5 x; N' k
    下面的描述引用了上述列表中的第三项,因为它是页中第一个名为 Add/Remove 的复选框对象。 7 ^& Y7 T% O9 f* w
    WinCheckBox("Name:=Add/Remove", "Location:=0") $ f7 O; A& \& y" p  p, u
    ! @' K1 t8 b1 z/ H
    但是,下面的描述引用的是上述列表中的第二项,因为它是第一个名为 Add/Remove 的、任何类型 (WinObject) 的对象。 7 h: u- M1 `; P
    WinObject("Name:=Add/Remove", "Location:=0")
    * p. x" |9 b! K9 R4 R, n9 a3 K
    使用 CreationTime 属性标识对象
           在录制期间,如果 QuickTest 不能仅基于测试对象描述唯一标识浏览器对象,它将为“CreationTime”测试对象属性分配一个值。该值指示该浏览器打开的顺序,相对于其他描述都 相同的其他打开的浏览器。在运行会话期间,如果 QuickTest 不能只是基于其测试对象描述来标识某个浏览器对象,那么,它将检查浏览器的打开顺序,然后使用“CreationTime”属性标识正确的对象。 6 j) h& P, N+ E9 b2 U' g
    例如,如果您在三个浏览器上录制测试或组件,这三个浏览器除了打开时间分别在 9:01 pm、9:03 pm 和 9:05 pm 之外,其他方面完全相同,那么,QuickTest 将把 CreationTime 值 0 分配给 9:01 pm 浏览器,1 分配给 9:03 pm 浏览器,2 分配给 9:05 pm 浏览器。在 10:30 pm,当您返回测试或组件时,假定浏览器分别在 10:31 pm、10:33 pm 和 10:34 pm 打开。QuickTest 将使用 CreationTime = 0 的浏览器测试对象标识 10:31 pm 浏览器,使用 CreationTime = 1 的测试对象标识 10:33 pm 浏览器,使用 CreationTime = 2 的测试对象标识 10:34 pm 浏览器。
    * c) {! n9 F9 U0 M8 ^' p* x  F
           如果打开几个浏览器,则 CreationTime 最高的浏览器是最后一个打开的浏览器,CreationTime 最低的浏览器是第一个打开的浏览器。例如,如果打开三个或更多的浏览器,则 CreationTime = 2 的浏览器是第三个打开的浏览器。如果恰好有七个或更少的浏览器,则 CreationTime = 6 的浏览器是最后一个打开的浏览器。 2 z. A2 i( D! K* S- Y
    $ Y4 }, w+ u4 z* @" H! D
          例如,如果在 CreationTime = 6 的浏览器上录制步骤,并且具有该 CreationTime 值的浏览器没有打开,该步骤将在当前打开的、CreationTime 值最高的浏览器上运行。例如,如果在运行会话期间,当前打开了 CreationTime = 0 和 CreationTime = 1 的两个浏览器,那么该步骤不会由于找不到 CreationTime = 6 的浏览器而失败,相反,它会在最后一个打开的浏览器上运行,如果是这种情况,浏览器 CreationTime = 1。
    * K5 c( C! P0 h. H  Z& e
    * |  ]! Y5 _: M1 t      注意:可能会出现这样的情况,在会话期间的特定时间,可用的 CreationTime值并不有序。例如,如果您在录制或运行会话期间打开六个浏览器,然后在该会话期间,您关闭第二个和第四个浏览器 (CreationTime 值为 1 和 3),那么在会话结束时,打开的浏览器将是 CreationTime 值为 0、2、4 和 5 的浏览器! o, o) \  N& E0 T. z% r& k
                             # x) I. w# J5 a4 i3 r% B$ d
  • QTP测试页面的连接是否可用.

    2008-12-07 13:52:45

    set a= Browser("Yahoo!")
    set b= Browser("Yahoo!").Page("Yahoo!")
    call CheckLinks(a,b)
    Function CheckLinks (BrowserObject,BrowserPage)
    CheckLinks=TRUE
    Dim s_URL,i_CreationTime
    Dim s_LinkOuterText,s_LinkInnerText,s_Linkhref
    s_URL=BrowserPage.GetROProperty("url")
    i_CreationTime=1
    i_LinkCount=BrowserPage.object.links.length - 1

    Dim i_Link

    For i_Link=0 to i_LinkCount
    If Trim(BrowserPage.object.links(i_Link).target)="" Then
    BrowserPage.object.links(i_Link).target="_blank" ' Set the link to open i a new window so that we dont have any change in current window
    End If

    BrowserPage.object.links(i_Link).click
    On error resume next
    Browser("CreationTime:=" & i_CreationTime).sync
    Browser("CreationTime:=" & i_CreationTime).Page("micClass:=Page").sync
    On error goto 0
    Dim s_LinkDetails

    IHTML = Browser("CreationTime:=" & i_CreationTime).Page("micClass:=Page").object.Body.innerHTML
    'Check if page was not able to be displayed
    If (InStr(IHTML,"HTTP 404") <> 0) Or (InStr(IHTML,"cannot be displayed") <> 0) Then
    s_LinkDetails="Link Broken" + vbcrlf + "Link Details:" +vbcrlf
    s_LinkDetails=s_LinkDetails+"OuterText: "+ s_LinkOuterText + vbcrlf
    s_LinkDetails=s_LinkDetails+"InnerText: "+ s_LinkInnerText + vbcrlf
    s_LinkDetails=s_LinkDetails+ "href: " + s_Linkhref+ vbcrlf
    s_LinkDetails=s_LinkDetails+ "Links Open in New Browse: " & bNewBrowser & vbcrlf
    Reporter.ReportEvent micWarning,"Check Link(" & i_Link & ") -> " & s_LinkOuterText ,s_LinkDetails
    CheckLinks=FALSE
    Else
    s_LinkDetails="Link Working" + vbcrlf + "Link Details:" +vbcrlf
    s_LinkDetails=s_LinkDetails+"OuterText: "+ s_LinkOuterText + vbcrlf
    s_LinkDetails=s_LinkDetails+"InnerText: "+ s_LinkInnerText+ vbcrlf
    s_LinkDetails=s_LinkDetails+ "href: " + s_Linkhref+ vbcrlf
    s_LinkDetails=s_LinkDetails+ "Links Open in New Browse: " & bNewBrowser & vbcrlf
    Reporter.ReportEvent micPass,"Check Link(" & i_Link & ") -> " & s_LinkOuterText ,s_LinkDetails
    End If

    Browser("CreationTime:=1").close ' Close the link open.
    Next
    End Function

  • 我的栏目

    数据统计

    • 访问量: 8268
    • 日志数: 13
    • 建立时间: 2008-12-04
    • 更新时间: 2010-03-12

    RSS订阅

    Open Toolbar