QTP知识积累

       
  1、在调试脚本时,可能会出现,脚本没有执行完就提前结束运行;
      在语法没有问题的前提下,需要排查变量的问题:
      变量声明要求:建议使用Option Explicit语句强制显式声明所有变量;
      VBS声明变量有三种:显示声明、隐式声明和强制声明;
      使用隐式声明方式的习惯不好,因为这样有时会由于变量名拼错而导致程序运行出现意外,因此,最好在每个脚本开始第一行使用Option Explicit语句强制显式声明所有变量。 
      注意:在VBScript中,变量名是不区分大小写,即userName与UserName是指同一个变量。
       
  2、MTStar中,如何获取【商品数据管理】详细内容的行数,选择某行信息,获取某列的内容(详细内容的控件不是Table,而是WebElement)
      ChildObjects方法
      Set oDesc = Description.Create() '建立一个空属性的对象
      oDesc("html tag").value="table" '在空的对象中添加属性html tag,并赋值为“table”
      Set Lists =Browser("*").Page("*").Frame("*").WebElement("*").ChildObjects(oDesc)
      '在制定界面上获取所有属性值为"table"的对象,并赋值给Lists(注意:赋值后lists类型一个对象数组)
      NumberOfLists = Lists.Count() '获取lists里面所有对象的总数
      i=randomnumber(0,NumberOfLists-1)
      Lists(i).Click '选择列表中的随机行
      PLU_NAME_1 = Lists(t).celltext(1,3) '获得随机行中的商品名称
       
  3、MTStar中,新建【计划任务】,选择指定日期时间执行任务时,随机选择时间的方法
      同样可以使用ChildObjects方法:
      Set oDesc = Description.Create()
      oDesc("micClass").value = "WebElement" 
      Set Lists = Browser("*").Page("*").Frame("*").WebElement("指定日期_时间选择").ChildObjects(oDesc)
      NumberOfLists = Lists.Count()'获得指定日期中下拉框时间的可选择的数量,然后随机选择某个时间
      x = RandomNumber(1,96) 
      Lists(x).click
      思路:想要随机选择时间,首先要确定包含这个时间的父控件,即WebElement,然后确定该时间的控件属性(子控件),也是WebElement;我们需要在父控件中将所有子控件的对象全部统计,然后即可完成随机选择时间;
      注:通过2、3两个例子,可灵活使用ChildObjects方法。
       
  4、MTStar中,获取【商品数据管理】中详细信息中所有PLU的属性值(如单价),需要验证商品批量变价功能
      index使用:
      方法一:使用第2个例子中 Lists(t).celltext(1,3)的方法,“3”代表t行中顺序第三个内容;
      方法一的前提是,每个人的PLU可用字段设置需要一致(可在【系统设置】设置);故使用第一种方法有一定的局限性;
      方法二:使用描述性编程描述Browser("*").Page("*").Frame("*").WebElement("class:=x-grid3-col x-grid3-cell x-grid3-td-grid_PRICE_1","index:="&i).GetROProperty("innertext")
      思路:先确定要获取的值是什么属性,该例属性是WebElement,然后要定位具体详细属性,可以通过IE8自带的“开发人员工具”(F12)来定位该字段,获取详细属性;
      注:使用index的前提,多个属性拥有某个相同的详细属性,如例子中的“class”;
       
  5、MTStar中,验证备份、下载等功能时,需要清空保存路径中相同文件名的文件
      方法一:
      set fso=CreateObject("Scripting.FileSystemObject")
      bFileExist=fso.FileExists(ExcelDir)
      if bFileExist then
         set xlApp=fso.GetFile(ExcelDir)
         xlApp.Delete
      end if
      方法二:
      Set  fso = CreateObject("Scripting.FileSystemObject")
      If  fso.FileExists (sSourceFile) Then
          fso.DeleteFile (sSourceFile)
          wait 2
          Set fso = Nothing
      end if
       
  6、验证备份、下载功能,需要读取下载文件中的行数
      '读取文件中明细行数:
      Set ExcelApp = CreateObject("Excel.Application") '创建Excel自动化模型对象
      Set Workbook = ExcelApp.Workbooks.Open(ExcelDir) 'ExcelDir为Excel的路径
      rowcount = Workbook.ActiveSheet.UsedRange.Rows.count-1 '去掉标题行
      Workbook.Close
      ExcelApp.Quit
      set Workbook=nothing
      Set  ExcelApp=nothing
       
  7、对控件对象的FireEvent方法使用
      1、它支持的事件有:onchange,onclick,ondblclick,onblur,onfocus,onmousedown,onmouseup,
      onmouseover,onmouseout,onsubmit,onreset,onpropertychange。
      2、用法:
         如:(对象*).FireEvent ("onfocus");获得对象的焦点
       
  8、获取随机数的方法
      方法一:
      myRnd = RandomNumber(m,n) '生成m到n之间的随机数
      方法二:
      Randomize  '初始化随机数产生器
      myRnd = Int(((y - x + 1) * Rnd) +x) '生成x到y之间的随机数
       
  9、框架转移问题
      框架转移到JAVA版mtstar上需要修改以下内容:
      1、打开QTP,Automation-Record and Run Settings-Web,修改默认打开URL链接,在今后做调试的时候可直接打开新的URL;
      2、对应步骤1,还需要在主运行脚本.vbs文档中修改QTP默认打开的URL链接:qtTest.Settings.Launchers("Web").Address=【最新的URL】;
      3、可直接将之前的Login通用脚本,用在新的项目中,但需要重新添加对象库;
      4、脚本中需要添加两个环境变量:Log:File>C:jinttMT_Star_QuicktestReport2014-4-21_165047.xls;和TestPage:TestCase计划任务
      5、添加Action时,选择Call to New Action时,务必要选择“After the current step”,然后再删除对应的“RunAction "***", oneIteration”语句
        (如果选择“At the end of the test”,虽然不会出现“RunAction "***", oneIteration”语句,但是所有脚本运行结束后,仍然后继续执行刚新增的Action)。
       
  10、判断对象是否存在的用法注意
      Browser(*).Page(*).Link(*).Exist(0) = True
      False ----这个要注意了,明明Exist返回的是True,但这条语句就是返回 False;
      QTP的Exist有问题,因此以后使用时只使用以下形式:
      if Browser().Page().WebElement().exist(10) Then
      ……
      End if
     
      if Not(Browser().Page().WebElement().exist(10)) Then
      ……
      End if
       
  11、WebTable控件
      WebTable对象常用的方法有:ColumnCount、RowCount、GetCellData、ChildItem等。以下为四个方法的语法:
      1、ColumnCount 方法
      描述:返回表中的列数
      语法:object.ColumnCount (Row)
                object:类型 WebTable 的测试对象。
                Row:必填. Long 值。 行号。表中的第一行编号为 1。
      返回类型:Long 值。  
      2、RowCount 方法
      描述:返回表中的行数
      语法:object.RowCount
                object:类型 WebTable 的测试对象。
      返回类型:Long 值。
      3、GetCellData 方法
      描述:返回包含于指定单元格中的文本
      语法:object.GetCellData (vtRow, vtColumn)
                object:类型 WebTable 的测试对象。
                vtRow:必填. Variant 值。 单元格所在行的行号。表中的第一行编号为 1。
                vtColumn:必填. Variant 值。 单元格所在列的编号。表中的第一列编号为 1。
      返回类型:String 值。  返回指定单元格中包含的数据。
      如果指定单元格无效,该方法返回 micCellDoesNotExist 
      4、ChildItem 方法
      描述:按类型和索引返回单元格中的测试对象
      语法:object.ChildItem (Row, Column, MicClass, Index)
                object:类型 WebTable 的测试对象。
                Row:必填. Long 值。 单元格所在行的行号。表中的第一行编号为 1。
                Column:必填. Long 值。 单元格所在列的编号。表中的第一列编号为 1。
                MicClass:必填. String 值。 对象类型。
                Index:必填. Long 值。 单元格中 MicClass 类型的对象的索引。
                            当单元格中有多个 MicClass  类型的对象时,此索引指示所需的元素。
                            第一个对象的索引为 0。
      返回类型:Object 对象。
       
      实例一:
      Dim RowCount 
      RowCount  = Browser("Browser").Page("Page").WebTable("WebTable").RowCount
      msgbox RowCount
      For I = 2 to RowCount
       cons_no=Browser("Browser").Page("Page").Frame("Frame").WebTable("html tag:=table","index:=2").GetCellData(4,2)
       reporter.ReportEvent micDone,"用户编号","用户编号为:"&cons_no
      Next
       
      实例二:
      Set objTable=Browser("creationTime:=0").Page("index:=0").Frame("name:=TreeMenuFrame").WebTable("html tag:=TABLE","index:=1")
      dim intRow 
      intRow = Browser("creationTime:=0").Page("index:=0").Frame("name:=TreeMenuFrame").WebTable("html tag:=TABLE","index:=1").GetROProperty("rows")
       
      dim intColumn
      intColumn=Browser("creationTime:=0").Page("index:=0").Frame("name:=TreeMenuFrame").WebTable("html tag:=TABLE","index:=1").GetROProperty("cols")
       
      Set objLink = objTable.ChildItem(intRow,intColumn,"Image",32) 
      If  not objLink.Exist(0) Then
       msgbox "系统中没有您要找的菜单,请检查!"
       else
       objLink.click
      End If
原文地址:https://www.cnblogs.com/tester-juan/p/4159532.html