| 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 | |||