将"测试"进行到底!~!

发布新日志

  • QTP:GUI层——面向对象的扩展设计

    2009-12-03 08:41:05

  • About: Browser.back is not working (Favourites)

    2008-04-20 19:43:21

    I am working on QTP 9.5 and Ie 6.0.
    Browser("micclass:=Browser","creation time:= 1").Back is not working for me.
    I have seen other posts on this issue and tired other workarouunds also.I unistalled QTP and reistalled it. but still not able to get this issue solved.

    Any other suggestions please?

    ANSWER:

    First:

    Here is a workaround. Call the following method from your scrīpt

    Code:



    Public Sub bBack(gBrowser)

    Set bWin = Window("hwnd:="&gBrowser.GetROProperty("hwnd"))
    bWin.click 0,300

    Set WshShell = CreateObject("Wscrīpt.Shell")
    WshShell.AppActivate "Windows Internet Explorer"
    wait(1)
    WshShell.SendKeys "{BACKSPACE}"

    Set WshShell = nothing
    Set bWin = nothing

    End Sub
    Second:
    Ren, I am using IE 6.0 and QTP 9.5. I did run the following test which worked:

    Browser("micclass:=Browser").Navigate("http://www.yahoo.com")
    Browser("micclass:=Browser").back

    This returned it to the original page.

    Is is possible that you are using the "creationtime" incorrectly? If you have one browser open creationtime should be "creationtime:=0" and not "1" as you have it in your scrīpt. Hope this helps.
    (Statement: This Post come from sqaforums.com)
  • qtp中的数据库、文件操作---转载wonew1228

    2008-04-09 11:47:14

    1.datatable

            QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或测试用例填入这个数据表中.

    如:设计用例

       username  passwd

    case1  mercury mercury

    case2 xxxxxxx xxxxxx

    录制脚本

    For i=1 to Datatable.GetRowCount
    Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").Set DataTable("passwd", dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    datatable.GlobalSheet.SetNextRow
    Next

            本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的自动化测试不能够称为自动化测试.
            当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.

    2.文本文件

            我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.

    例:文本文件内的内容

      mercury,mercuy

    读文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile,username,passwd
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\testing.txt",1,false)
    tmp=split(myfile.readline,",")
    username=tmp(0)
    passwd=tmp(1)
    myfile.close
    End Function

    写文本文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\result1.txt",8,false)
    myfile.writeline orderno
    myfile.close
    End Function

    3EXCEL文件

            我们可以把EXCEL文件当成数据文件,通过对EXCEL文件的读写操作,来实现数据驱动.

            可以把EXCEL文件当作对象的方式来完成写的操作

    Dim Excel,ExcelSheet
    Set Excel=CreateObject("Excel.Application")
    Set ExcelSheet=CreateObject("Excel.Sheet")
    ExcelSheet.Application.visible=true
    ExcelSheet.ActiveSheet.Cells(1,1).value=1
    ExcelSheet.ActiveSheet.Cells(1,2).value=2
    ExcelSheet.ActiveSheet.Cells(1,3).value=3
    Excel.Save "C:\test.xls"
    Set ExcelSheet=Nothing

            用ADO的方式连接EXCEL文件来做读的操作


    Dim conn,input,filename
    filename="D:\公基本情况(tb_gsgk)-标准格式.xls" '
    Set conn= createobject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&filename&";Extended Properties='Excel 8.0;hdr=yes'"
    Set input= createobject("ADODB.Recordset")
    input.Open "select * from [公基本情况-标准格式$] " ,conn,2,2
    input.close
    Set input=nothing

    4.数据库

            可以利用设计数据表,把测试数据和测试用例放在数据表里,用ADO或者其他任何可以访问连接数据库的方式连接数据库,来实现数据驱动

       Dim res,cmd,sql
    Set Res=createobject("adodb.recordset")
    Set Cmd=createobject("adodb.command")
    Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
    Cmd.CommandType = 1
    sql="selec t * from 表 where name=username"
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing

    以上四种方法都可以帮助我们实现数据驱动,应该说数据驱动在自动化测试中运用的比较的广泛,才有必要拿出来探讨一下.

  • QTP专用函数

    2008-04-06 10:08:22

    序列号 函数名 函数作用 第一参 第二参 第三参 第四参 第五参 返回值
    1 QTP_Small()  让QTP运行时保持最小化      
    2 QTP_Big()  '恢复QTP窗口      
    3 "QTP_WriteFile(pathway,words)"  '写文件函数(追加) 文件路径 写入内容    
    4 "Function QTP_WriteFile_Change(pathway,words)" '写文件函数(改写)  文件路径  写入内容    
    5 "QTP_Read_Excel(pathway,sheetname,x,y)" '读Excel文件元素  文件路径 工作表名  行值 列值  
    6 "QTP_Write_Excel(pathway,sheetname,x,y,content)" '写Excel文件元素并保存退出 文件路径
    工作表名 行值 列值 写入内容 
    7 "QTP_Msgbox(Value,waitTime,Title)" 定时停留弹出框函数  弹出值 弹出框停留时间 弹出框标题   
    8 "QTP_Change_Color(pathway,sheetname,x,y,color)" '改变Excel的单元格颜色 文件路径 工作表名
    行值  列值  颜色(只接受red和green) 
    9 QTP_Capture(pathway) '捕获当前屏幕(截图) 保存图片路径

    1 Function CreateExcel() 生成Excel对象和默认新工作表  Excel对象
    2 Sub CloseExcel(ExcelApp) 关闭指定的Excel  Excel对象     
    3 "Function SaveWorkbook(ExcelApp, workbookIdentifier, path)" 保存工作表 Excel对象 工作表名
    Excel文件路径  1成功,0失败
    4 "Sub SetCellValue(excelSheet, row, column, value)" 给Excel元素赋值 工作表名 行 列 值  
    5 "Function GetCellValue(excelSheet, row, column)" 获得指定元素值 工作表名 行 列 值,0未找到元素
    6 "Function GetSheet(ExcelApp, sheetIdentifier)         返回工作表  工作表
    7 "Function InsertNewWorksheet(ExcelApp, workbookIdentifier, sheetName)" 插入一个新的工作表 Excel对象
    工作表名 新工作表名 新工作表对象
    8 Function CreateNewWorkbook(ExcelApp) 建立一个新表 Excel对象     
    9 "Function OpenWorkbook(ExcelApp, path)" 打开一个之前保存过的工作表 Excel对象 路径    
    10 "Sub ActivateWorkbook(ExcelApp, workbookIdentifier)" 激活工作表  Excel对象 工作表名    
    11 "Sub CloseWorkbook(ExcelApp, workbookIdentifier)" 关闭工作表  Excel对象 工作表名    
    12 "Function CompareSheets(sheet1, sheet2, startColumn, numberOfColumns, startRow, numberOfRows, trimed)" 比较工作表
    1工作表一2工作表二 3起始列 4列数 5起始行 6行数 默认参数  true一致  false不一致

    QTP与Robot通用函数:
    序列号 函数名 函数作用  第一参 第二参 第三参 第四参 返回值
    1 Get_Data() 获取当前日期     
    2 Get_Time() 获取当前时间     
    3 "Get_RandNum(fromNum,toNum)" 随机函数生成 起始生成值 结束生成值 随机数
    4 "Swap(byref a,byref b)" 值交换函数 交换参数1 交换参数2 (引用调用)
    5 IsPrimeNumber(num) 是否是质数函数 '是质数返回true,否则返回false
    6 "ReadLine(pathway, rowcount)" 读指定文本文件指定行内容 文件路径  行数 
    "返回指定行内容,""文本越界"",""文件不存在"""
    7 Function MakeString(inputlength) 随机生成字符串 字符串长度  随机字符串
    8 Sub ZYGLQ() 启动资源管理器     
    9 Sub Run() 启动运行     
    10 "SendMail(SendTo, Subject, Body, Attachment)" 调用outlook发送电子邮件 收件人 主题 邮件内容 附件 
    11 "Function NoRepeat(Inp,Sp)" 去掉字符串中的重复项 输入字符串  字符串分隔符  无重复的字符串
    12 Function GetLen(Str) 求字符串长度(中文算2个西文字符) 输入字符串    
    13 Sub RunApp(command) 运行指定程序  运行程序名    
    14 Function Nextday(ByVal inputday)  求下一天是几号的函数 原始日期  原始日期后一天的日期
    15 Function ISLeapYear(ByVal inYear) 判断是否闰年 年份 true:是闰年  false:非闰年
    16 "Function Days(SourceData, DesData)" 计算两个日期之间相隔几天  初时日期  目的日期  相隔天数
    17 Function Identification(Text1) 检查身份证号是否正确 身份证号  正确:true  错误:false
    18 "Access_GetCount(DBlocation,TableName,Value)" 查询Access数据库字符出现次数  数据库存放位置  表名 
    查询的值  返回值出现的次数
    19 Function checkString (myString) 检查是否存在数字  输入字符串  true:存在数字 false:不存在数字
    20 "Function BubbleSort(VString,Spl,Func)" 按ASCII码值冒泡排序  待排序的字符串  分隔符  排序方式:
    1降序,2升序 排序完的序列

  • 转载[楷子狐]随机选择页面上所有下拉框,函数参数怎样设置为一个对象?

    2008-02-19 13:38:49

    给对象添加自定义方法,随机选择页面上所有下拉框

    2008-02-19 11:57:18 / 个人分类:测试技术

    一个函数,随机选择页面上的下拉框:软件测试专业网站:51Testing软件测试网/A@k$L&g!U*B
    ××××××××××××××××××××××××××××××××××××××××××××××

     dim i 
     Set ōDesc = Descrīption.Create()
    oDesc("html tag").Value = "SELECT"
     oDesc("disabled").Value = 0
    Set lists = myPage.ChildObjects(oDesc)
     For i = 0 To Lists.Count - 1
     Lists(i).select RandomNumber(0, Lists(i).GetROProperty("items count")-1)
    Next
    End Sub

    AllSelect(rightFrame) '“rightFrame”为一个框架页面,过程调用成功!

    ×××××××××××××××××××××××××××××××××××××××××××××××

    同理,给对象添加方法:

    Public Sub  AllSelect(byref myPage)
     Set ōDesc = Descrīption.Create()
     oDesc("html tag").Value = "SELECT"
    oDesc("disabled").Value = 0
    Set lists = myPage.ChildObjects(oDesc)
    For i = 0 To Lists.Count - 1
    Lists(i).select RandomNumber(0, Lists(i).GetROProperty("items count")-1)
     Next
    RegisterUserFunc "Frame", "AllSelect", "AllSelect",True

    rightFrame.AllSelect  '“rightFrame”为一个框架页面,方法调用成功

    ×××××××××××××××××××××××××××××××××××××××××××××××

    问题解决

    Public Sub  AllSelect(byref myPage)
            dim i
            Set ōDesc = Descrīption.Create()
            oDesc("html tag").Value = "SELECT"
            oDesc("disabled").Value = 0
            Set lists = myPage.ChildObjects(oDesc)
            For i = 0 To Lists.Count - 1
                    Lists(i).select RandomNumber(0, Lists(i).GetROProperty("items count")-1)
            Next
    End Sub
    RegisterUserFunc "Frame", "AllSelect", "AllSelect",True

    rightFrame.AllSelect '成功!
  • How to connect to a database?--怎么连接上数据库?

    2008-02-13 00:13:38

    How to connect to a database?
    code:
    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adUseClient = 3
    Set ōbjConnection = CreateObject("ADODB.Connection")
    Set ōbjRecordset = CreateObject("ADODB.Recordset")
    objConnection.Open "DRIVER={Microsoft ODBC for Oracle};UID=<UID>;PWD=<PWD>"
    objRecordset.CursorLocation = adUseClient
    objRecordset.CursorType = adopenstatic
    objRecordset.LockType = adlockoptimistic
    ObjRecordset.Source="select field1,field2 from testTable"
    ObjRecordset.ActiveConnection=ObjConnection
    ObjRecordset.Open 'This will execute your Query
    If ObjRecordset.recordcount>0 then
    Field1 = ObjRecordset("Field1").Value
    Field2 = ObjRecordset("Field2").Value
    End if
  • QTP模板

    2008-02-05 15:58:01

    '-------------------脚本说明---------------
    '
    测试对象
    :     
    '
    测试员
    :  David Gao
    '
    编写日期
    :
    '
    测试功能
    :
    '
    进展程度
    :
    '
    基本思路
    :
    '
    主要功能函数
    :
    '
    没解决的问题
    :
    '--------------------
    脚本内容
    -------------
    wait 5
    Dim firstTitle
    firstTitle = Browser("micClass:=Browser").Page("micClass:=Page").GetROProperty("title")
    Do while firstTitle="
    找不到服务器
    "
     Browser("micClass:=Browser").Refresh
    Loop

    Dim objectCount, tags, element, innerText()
    Set tags=Browser("Browser").Page("Page").Object.all

    objectCount=0
    For Each element in tags
        If Ucase(element.tagname)="A" Then
      ReDim Preserve innerText(objectCount+1)
            innerText(objectCount)=element.InnerText
         ōbjectCount=objectCount+1
        end if
    Next

Open Toolbar