一、QTP项目(ECShop)
  1、ECShop是一个开源免费的一个B2C的电子商务系统,主要用于商家和顾客进行商品交易操作。

  2、ECShop分为前台和后台两个子系统:
    (1)ECShop前台:顾客用于搜索商品、浏览商品、下单、结算、跟踪订单、投诉建议等。
    (2)ECShop后台:商家用于管理商品、上下架、促销管理、订单管理、报表统计、系统设置、会员管理、短信和邮件群发等等。
      http://localhost/ws/ecshop/upload/admin/index.php进入后台
      管理员姓名:admin
      密码:admin123

      http://localhost/ws/ecshop/upload/index.php进入前台

  3、项目准备:
    (1)配置ECShop后台登录页显示验证码:
      a.登录进入后台
      b.选择左侧的“系统设置”->“验证码管理”
      c.右侧勾选“后台管理员登录”复选框,点击“保存设置”
      d.点击“退出”
    (2)QTP在录制前配置:QTP->Tools->Options->Active Screen->勾选“Load ActiveX controls”复选框,点击“OK”
      说明:如果忘记在录制前做该配置,那么查看Active Screen视图中截图时,报警告“当前的安全设置禁止运行该页中的ActiveX控件,因此,该页可能无法正常显示”
    (3)ECShop后台登录成功后,偶尔报错“transport.js/error:缺少对象”,是ECShop缺陷。

        

      解决方案:测试时,一旦出现弹出信息框,就先添加“确定”按钮对象到对象仓库,在专家视图点击“确定”的步骤前,判断“确定”的父对象(就是弹出对话框)对象如果存在,就点击“确定”。
      使用的技术:Exist、If

  4.复习QTP做自动化测试基本的流程:
    (1)制定测试计划
    (2)准备测试用例
    (3)录制测试脚本
    (4)增强测试脚本
    (5)调试测试脚本
    (6)用于回归测试
    (7)完成测试总结报告

  5.ECShop后台登录模块
    (1)范围:三个输入框和一个按钮组成的功能。
    (2)熟悉被测系统需求的途径:
      a.需求说明书---测试依据
      b.设计文档
      c.用户手册、管理员手册、安装手册
      d.操作已有被测系统界面
      e.界面原型(假界面)
      f.投诉、FAQ等
    (3)假定:当前版本ECShop后台登录模块没有缺陷,也就是说当前版本被测系统的功能实现完全符合需求说明书。

      任务一:操作现有被测系统,分析点击“进入管理中心”后,被测系统有哪些种反应?---10分钟
        a.登录ECShop后台
        b.弹出提示框“管理员用户名不能为空”
        c.弹出弹出框“您没有输入验证码”
        d.弹出弹出框“管理员用户名不能为空,您没有输入验证码”
        e.网页跳转到错误信息页面“您输入的账号信息不正确”
        f.网页跳转到错误信息页面“您输入的验证码不正确”

    (4)设计测试用例:
      a.单个输入框分析:等价类
        用户名文本框:正确、为空、错误
        密码文本框:正确、为空、错误
        验证码文本框:正确、为空、错误
      b.输入项组合:正交表

        准备:4个Excel文件
        数据_ECShop_后台登录_模板.xls

          

        用例_ECShop_后台登录_z.xls

          

        用例_ECShop_后台登录_模板.xls

          

        数据_ECShop_后台登录_z.xls

          

      任务二:参照用例_ECShop_后台登录_模板.xls,设计测试用例(大概10-15条左右)---15分钟
        要求:覆盖所有的6种预期结果,相同的预期结果使用相同的预期结果编号

      任务三:参照数据_ECShop_后台登录_模板.xls,设计测试数据(大概15-20条左右)---15分钟
        要求:覆盖所有的测试用例,每条测试用例至少设计一条测试数据
        说明:错误的验证码最好设计位数错误或字符类型错误的验证码。

二、制作测试脚本
  1.设计代码的结构:(分为几个Action?)
    Action1导入---导入数据到DataTable的“后台登录”表单中(执行1次)
    Action2后台登录---向三个文本框中输入数据、点击“进入管理中心”按钮、根据不同情况做不同的检查、恢复到空白的登录页(执行多次)
    Action3退出---关闭浏览器(执行1次)

  2.设计主Action的结构(Action2中包含几个Function?)
    (1)向三个文本框中输入从DataTable中获取的数据
    (2)点击“进入管理中心”按钮
    (3)判断从DataTable中获取的“预期结果编号”等于不同值时,生成6个分支,在每个分支中调用一个Function
    (4)实现6个Function的函数体:
      a.做相应的检查
      b.恢复到空白的登录页

  3.创建3个Action,注意Action顺序

  4.实现Action1导入数据的代码
    '将E盘根目录下的“数据_ECShop_后台登录_z.xls”文件的“后台登录”表单数据导入到运行时数据表的“后台登录”表单中
    DataTable.ImportSheet "E:\数据_ECShop_后台登录_z.xls","后台登录","后台登录"
    注意:必须先关闭Excel文件,再运行该代码
    问题:
      a.有多余的有效行,需要打开Excel文件,来删除整行
      b.Excel不能有超链接,也不能合并单元格

  5.实现Action2的代码
    (1)自动启动的方式录制输入三个文本框数据后,点击“进入管理中心”按钮的步骤到Action2中
    (2)做DataTable参数化
    (3)书写分支结构,判断要做什么检查
    (4)思考:每个分支中调用的Function是否有参数?是否有返回值?
      ---无参数、无返回值

后台登录Action()
'(1)向三个文本框中输入从DataTable中获取的数据
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("username").Set DataTable("用户名",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("password").Set DataTable("密码",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("captcha").Set DataTable("验证码",dtLocalSheet)
'(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'(3)判断从DataTable中获取的“预期结果编号”等于不同值时,
'生成6个分支,在每个分支中调用一个Function
Select Case DataTable("预期结果编号",dtLocalSheet)
Case "BGL001"
Call Chk1()'调用名称为Chk1的Function
Case "BGL002"
Call Chk2()'调用名称为Chk2的Function
Case "BGL003"
Call Chk3()'调用名称为Chk3的Function
Case "BGL004"
Call Chk4()'调用名称为Chk4的Function
Case "BGL005"
Call Chk5()'调用名称为Chk5的Function
Case "BGL006"
Call Chk6()'调用名称为Chk6的Function
End Select '(4)实现6个Function的函数体:
' a.做相应的检查
' b.恢复到空白的登录页
Function Chk1()
print "=====Chk1开始==========="
End Function

三、实现每个函数体
  1.Chk1:
    (1)做检查:BGL001登录Ecshop后台(检查“退出”出现)
      技术:自定义检查点、“退出”的Exist属性
    (2)恢复到空白的登录页
      检查成功:点击“退出”
      检查失败:先结束IE进程、再启动ECShop
    (3)设计Chk1函数体代码的结构:
      If "退出"对象.Exist(3) Then
        点击“退出”
        reporter记录成功
      Else
        截图
        reporter记录失败
        结束IE进程
        启动ECShop后台
      End if
    (4)准备工作:将“退出”添加到对象仓库中
    (5)问题:当检查失败时,截图不正确,未截取到错误信息的界面
      原因:截图不及时,错误信息界面只出现3秒的时间。
      解决方案:不管检查成功还是失败,都做截图,就可以将截图的步骤上移到点击“进入管理中心”按钮的步骤之后。
    (6)问题:每行数据运行后截图都会覆盖上一行数据运行后的截图
      原因:截图文件名称是固定的,截图的步骤在主代码中
      解决方案:将DataTable的“测试数据编号”连接到截图文件名称中
      fn="D:\ECShop后台登录"&DataTable("测试数据编号",dtLocalSheet)&".png"
      例:
        ECShop后台登录D00001.png
        ECShop后台登录D00002.png

  2.Chk2
    (1)做检查:BGL002弹出信息框提示信息“管理员用户名不能为空”
      a.检查弹出信息框
        技术:自定义检查点、Exist属性
      b.检查信息内容正确
        技术:文本检查点
    (2)恢复到空白的登录页
      ab都成功:点击“确定”后,清空密码和验证码的文本框
      a成功b失败:点击“确定”后,清空密码和验证码的文本框
      a失败:结束IE进程,再启动ECShop
    (3)设计Chk2函数体代码的结构:
      If 信息框对象.Exist(2) Then
        记录a检查成功
        文本检查点
        点击“确定”
        清空密码文本框
        清空验证码文本框
      Else
        记录a检查失败
        结束IE进程
        启动ECShop后台
      End if
    (4)注意:补录使用的浏览器,最好是由QTP启动的浏览器,而不是手工启动的

      任务:参照Chk2,实现Chk4和Chk5的函数体
        BGL004 弹出信息框提示信息“您没有输入验证码”
        BGL005 弹出信息框提示信息“管理员用户名不能为空!您没有输入验证码”

      If 信息框对象.Exist(2) Then
        记录a检查成功
        文本检查点
        点击“确定”
        清空用户名文本框
        清空密码文本框
      Else
        记录a检查失败
        结束IE进程
        启动ECShop后台
      End if

  3.Chk3
    (1)做检查:BGL003跳到系统信息页面“您输入的帐号信息不正确。”
      a.跳转到系统信息页面
        技术:自定义检查点、Exist属性
        选取的控件:“您输入的账号信息不正确”的页面元素
      b.信息内容正确
        技术1:文本检查点
        技术2:WebElement对象的文本,可以直接检查对象Exist属性即可,因为关键属性中存在innertext属性记录文本内容。
    (2)问题:如何添加出现时间很短的对象到对象仓库?
      方法一:对象仓库页面中的“+”Add Objects to Local添加,要求操作速度要比较快(水上漂)
      方法二:(过河拆桥法)
        a.搭桥:补录该对象所在界面的动作,例如:返回上一页
        b.过河:通过Active Screen视图来添加对象到对象仓库
        c.拆桥:删除补录的步骤
    (3)恢复到空白的登录页
      检查成功:等待3秒,或者点击“返回上一页”
      检查失败:结束进程、启动ECShop
    (4)设计Chk3函数体代码的结构:
      If WebElement对象.Exist(3) Then
        记录成功
        等待3秒
      Else
        记录失败
        结束进程
        启动ECShop
      End if
    (5)问题:出现系统信息,但是检查时出现错误
      原因:检查不及时,系统信息页面3秒后会自动跳转,过了3秒才检查就检查失败。
      解决方案一:适当缩短步骤间的运行间隔时间
        注意:不要将步骤间隔时间设置太短,建议最少设置500毫秒
      解决方案二:将Chk3的分支移动到Chk1和Chk2的分支之前,并且删除不必须的步骤,例如Print语句。
        Select Case DataTable("预期结果编号",dtLocalSheet)
        Case "BGL003"
          Call Chk3()'调用名称为Chk3的Function
        Case "BGL001"
          Call Chk1()'调用名称为Chk1的Function
        Case "BGL002"
          Call Chk2()'调用名称为Chk2的Function
        Case "BGL004"
          Call Chk4()'调用名称为Chk4的Function
        Case "BGL005"
          Call Chk5()'调用名称为Chk5的Function
        Case "BGL006"
          Call Chk6()'调用名称为Chk6的Function
        End Select
      解决方案三:将点击“进入管理中心”按钮的步骤从主代码移动到每个函数的函数体开头位置。

        任务一:调试Chk3
        任务二:参照Chk3,实现Chk6
          BGL006 跳到系统信息页面“您输入的验证码不正确。”
        任务三:运行所有行
        任务四:实现Action3退出的步骤

    常见问题:
      1、被测系统未启动
        检查录制和运行设置
      2、<测试数据编号> column does not exist.列不存在
        检查回放前是不是忘记关闭数据文件
      3、“进入管理中心”按钮步骤出错
        检查是否在主代码中忘记删除“进入管理中心”按钮步骤

    Test1_ECShop_后台登录_z

导入Action()
'将E盘根目录下的“数据_ECShop_后台登录_z.xls”文件
'的“后台登录”表单数据导入到
'运行时数据表的“后台登录”表单中
DataTable.ImportSheet "E:\数据_ECShop_后台登录_z.xls","后台登录","后台登录" 后台登录Action()
Option Explicit
Dim url'ECShop后台网址
url="http://localhost/ws/ecshop/upload/admin/index.php"
Dim fn'file name截图文件的文件名称
fn="D:\ECShop后台登录"&DataTable("测试数据编号",dtLocalSheet)&".png"
'(1)向三个文本框中输入从DataTable中获取的数据
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("username").Set DataTable("用户名",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("password").Set DataTable("密码",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("captcha").Set DataTable("验证码",dtLocalSheet) '(3)判断从DataTable中获取的“预期结果编号”等于不同值时,
'生成6个分支,在每个分支中调用一个Function
Select Case DataTable("预期结果编号",dtLocalSheet)
Case "BGL003"
Call Chk3()'调用名称为Chk3的Function
Case "BGL001"
Call Chk1()'调用名称为Chk1的Function
Case "BGL002"
Call Chk2()'调用名称为Chk2的Function
Case "BGL004"
Call Chk4()'调用名称为Chk4的Function
Case "BGL005"
Call Chk5()'调用名称为Chk5的Function
Case "BGL006"
Call Chk6()'调用名称为Chk6的Function
End Select '(4)实现6个Function的函数体:
' a.做相应的检查
' b.恢复到空白的登录页
Function Chk1()
print "=====Chk1开始==========="
'(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True '===================
'如果出现js弹出框,就需要点击“确定”来关闭它 '===================
'检查“退出”出现,如果出现,代表登录成功
If Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_2").Frame("header-frame").Link("退出").Exist(3) Then
'点击“退出”
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_2").Frame("header-frame").Link("退出").Click
'记录成功
reporter.ReportEvent micPass,"BGL001检查登录成功","登录成功"
Else '记录失败
reporter.ReportEvent micFail,"BGL001检查登录成功","登录失败",fn
'结束IE进程
SystemUtil.CloseDescendentProcesses
'启动ECShop后台
SystemUtil.Run "iexplore.exe",url
End If
End Function Function Chk2()
print "=====Chk2开始===========" '(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True 'a检查:检查是否弹出提示框
If Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Exist(2) Then
'记录a检查成功
reporter.ReportEvent micPass,"BGL002","已弹出提示框"
'文本检查点:检查提示信息内容为“管理员用户名不能为空”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Static("提示信息").Check CheckPoint("- 管理员用户名不能为空!")
'点击“确定”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
'清空密码文本框
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_3").WebEdit("password").Set ""
'清空验证码文本框
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_3").WebEdit("captcha").Set ""
Else
'记录a检查失败
reporter.ReportEvent micFail,"BGL002","未弹出提示框",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe",url
End If
End Function Function Chk3()
print "=====Chk3开始===========" '(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True If Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebElement("warning").Exist(3) Then
reporter.ReportEvent micPass,"BGL003","跳转到账号信息不正确的页面"
wait 3
Else
reporter.ReportEvent micFail,"BGL003","未跳转到账号信息不正确的页面",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe",url
End If
'Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_4").WebButton("进入管理中心").Click
'Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Link("返回上一页").Click
End Function Function Chk4()
print "=====Chk4开始==========="
'(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True 'a检查:检查是否弹出提示框
If Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Exist(2) Then
reporter.ReportEvent micPass,"BGL004","已弹出提示框"
'文本检查点:检查提示信息内容是“您没有输入验证码”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Static("提示信息").Check CheckPoint("- 您没有输入验证码!")
'点击“确定”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
'清空用户名文本框
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_3").WebEdit("username").Set ""
'清空密码文本框
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_3").WebEdit("password").Set ""
Else
reporter.ReportEvent micFail,"BGL004","未弹出提示框",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe",url
End If
End Function Function Chk5()
print "=====Chk5开始==========="
'(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True 'a检查:检查是否弹出提示框
If Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Exist(2) Then
reporter.ReportEvent micPass,"BGL005","已弹出提示框"
'文本检查点:检查提示信息内容为“管理员用户名不能为空,您没有输入验证码”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Static("提示信息").Check CheckPoint("- 管理员用户名不能为空! - 您没有输入验证码!")
'点击“确定”
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
'清空密码文本框
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("password").Set ""
Else
reporter.ReportEvent micFail,"BGL005","未弹出提示框",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe",url
End If
End Function Function Chk6()
print "=====Chk6开始==========="
'(2)点击“进入管理中心”按钮
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'截图
desktop.CaptureBitmap fn,True
If Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebElement("warning_2").Exist(3) Then
reporter.ReportEvent micPass,"BGL006","跳转到您输入的验证码不正确的页面"
wait 3
Else
reporter.ReportEvent micFail,"BGL006","未跳转到您输入的验证码不正确的页面",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe",url
End If
'Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
'Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Link("返回上一页").Click
End Function 退出Action()
'关闭浏览器
Browser("ECSHOP 管理中心").Close

四、补充:恢复数据
  1、如果测试的是登录、搜索这类的功能时,不用恢复数据。

  2、如果测试的是注册、添加XXX、删除XXX、修改XXX的功能时,需要恢复数据。

  3、注册、添加XXX
    方法一:在不允许重复的数据上,连接系统日期和系统时间。
      例如注册账号a201826153751、a201826153758
    方法二:添加a->检查a添加成功->删除a

  4、删除XXX
    方法:删除a->检查a删除成功->添加a

  5、修改XXX
    方法:修改a为b->检查变为b->修改b为a

  6、例子:ECShop后台添加会员的功能
    (1)设计代码的结构(划分为几个Action?)
      Action1登录---登录(执行1次)
      Action2添加会员---点击“添加会员”菜单、输入各个数据、点击“确定”、点击“会员列表”菜单、输入会员名称,点击“搜索”,检查表格中数据正确,勾选表格中复选框,点击“删除会员”(执行多次)
      Action3退出---点击“退出”,关闭浏览器(执行1次)
      Test2_ECShop_添加会员_z

登录Action()
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("username").Set "admin"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("password").SetSecure "5a796915b9875773cf69024482f0db05054510bd159d"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebEdit("captcha").Set "0"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").WebButton("进入管理中心").Click
wait 3 添加会员Action()
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("menu-frame").Link("添加会员").Click
wait 2
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("username").Set DataTable("会员名称",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("email").Set DataTable("邮件地址",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("password").Set DataTable("登录密码",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("confirm_password").Set DataTable("确认密码",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebList("user_rank").Select "代销用户"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebRadioGroup("sex").Select "2"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebList("birthdayYear").Select "1959"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebList("birthdayMonth").Select "02"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebList("birthdayDay").Select "02"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("credit_line").Set "1000"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("extend_field1").Set "zhengxuejing@163.com"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("extend_field2").Set "12345678"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("extend_field3").Set "01012345678"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("extend_field4").Set "01087654321"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebEdit("extend_field5").Set "13012345678"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame").WebButton("确定").Click
wait 3
Select Case DataTable("预期结果编号",dtLocalSheet)
Case "AU001"
Call Chk1()
Case "AU002"
Call Chk2()
End Select Function Chk1()
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("menu-frame").Link("会员列表").Click
wait 2
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame_2").WebEdit("keyword").Set DataTable("会员名称",dtLocalSheet)
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame_2").WebButton("搜索").Click
wait 3
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame_2").WebTable("编号").Check CheckPoint("编号")
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame_2").WebCheckBox("checkboxes[]").Set "ON"
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("main-frame_2").WebButton("删除会员").Click
wait 3
End Function Function Chk2()
If Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Exist(2) Then
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").Static("- 输入的密码和确认密码不一致。").Check CheckPoint("- 输入的密码和确认密码不一致。")
Browser("ECSHOP 管理中心").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Else
Dim fn
fn="D:\添加会员AU002.png"
desktop.CaptureBitmap fn,True
reporter.ReportEvent micFail,"AU002","未弹出提示框",fn
SystemUtil.CloseDescendentProcesses
SystemUtil.Run "iexplore.exe","http://localhost/ws/ecshop/upload/admin/index.php"
RunAction "登录", oneIteration
End If
End Function 退出Action()
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心").Frame("header-frame").Link("退出").Click
Browser("ECSHOP 管理中心").Page("ECSHOP 管理中心_2").Sync
Browser("ECSHOP 管理中心").Close

    (2)实现DataTable参数化:
      会员名称、邮件地址、登录密码、确认密码
      zwh zwh@163.com 123456 123456
      z123 z123@163.com 654321 654321

QTP(16)的更多相关文章

  1. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  2. Windows Phone开发(16):样式和控件模板

    原文:Windows Phone开发(16):样式和控件模板 在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的 ...

  3. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  4. leecode刷题(16)-- 字符串转换整数

    leecode刷题(16)-- 字符串转换整数 字符串转换整数 描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格 ...

  5. Qt 学习之路 2(16):深入 Qt5 信号槽新语法

    Qt 学习之路 2(16):深入 Qt5 信号槽新语法  豆子  2012年9月19日  Qt 学习之路 2  53条评论 在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号 ...

  6. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  7. Flutter学习笔记(16)--Scaffold脚手架、AppBar组件、BottomNavigationBar组件

    如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 今天的内容是Scaffold脚手架.AppBar组件.BottomNavigationBa ...

  8. 【雕爷学编程】Arduino动手做(16)---数字触摸传感器

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化]

    [易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来 ...

随机推荐

  1. linux的vm.overcommit_memory的内存分配参数详解

    公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的: [13223] 17 Mar 13:18:02.207 # WARNING overcom ...

  2. Win10编译Mingw

    准备工具 Windows平台 cmake mingw-x64 Linux平台(Ubuntu) sudo apt-get install git cmake cmake-gui -y 下载源码 建议直接 ...

  3. 《精通并发与Netty》学习笔记(01 - netty介绍及环境搭建)

    一.Netty介绍     Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.     ...

  4. Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)

    Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown) 股票问题: 121. 买卖股票 ...

  5. D3学习之坐标系绘制

    坐标轴的绘制我们需要搞清楚以下三个要点: 1).axis函数 2)..call()函数用于组合 3).坐标轴的平移旋转 关于第三点其实就是"transform","tra ...

  6. 【图象处理】图文详解YUV420数据格式

    转载自: http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed. 对于plan ...

  7. 【机器学习】ICA特征提取

    看完了ICA的一整套原理介绍后,感觉完整的介绍和andrew ng的课程中的ICA特征提取关系不是很大:在ICA的理论中,主要用于盲源分离的,也就是混合的观测数据X,通过一个正交的且其范数为1的分离矩 ...

  8. SpringCloud学习(四)断路器(Hystrix)(Finchley版本)

    在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...

  9. MNFTL: An Efficient Flash Translation Layer for MLC

    1. we propose two approaches, namely, concentrated mapping and postponed reclamation, to effective r ...

  10. setsockopt用法详解

    最近做的一个程序用到了IOCP通信模型,里面用到了setsockopt对套接字进行设置,看源代码的时候最setsockopt函数很不理解,看了msdn以后还是不太明白这个函数的用法,于是就到网上找了一 ...