发布新日志

  • [论坛] QTP--VBS批量处理图片文件

    2009-12-08 17:59:57

    用数码相机拍了一些照片,放到手机上发现由于太大手机无法识别。
    以前看过大虾用aspJpeg组件操作过图片,就想到通过同样的方法VBS批量缩小下图片!

    ==============================================================================================
    '图片的高度和宽度修改成原来的1/10
    Function update_picture(filename,newfilename)

            Dim Jpeg

            Set Jpeg=CreateObject("Persits.Jpeg")
            Jpeg.Open filename
            Jpeg.Width =Jpeg.OriginalWidth/10
            Jpeg.Height =Jpeg.OriginalHeight /10

            Jpeg.Save newfilename
            Jpeg.Close
            Set Jpeg=Nothing
           
    End Function
    '

    Dim fs,fo,x
    Dim str1,str2,filename,newfilename

    str1 = "G:\1\"
    str2 = "G:\2\"
    set fs=CreateObject("Scripting.FileSystemObject")
    set fo=fs.GetFolder(str1)

    '遍历文件夹str1中的所有文件
    For each x in fo.files
       filename =str1 & x.Name
       newfilename = str2 & x.Name
       call update_picture(filename,newfilename)
    next
    set fo=nothing
    set fs=nothing
    ==============================================================================================
  • QTP--低级录制

    2009-06-23 17:27:30

    转:

    Analog recording(模拟录制 )

    模拟录制用于您要在其中录制鼠标的实际移动的应用程序。这些可能包括绘制鼠标签名或者使用通过拖动鼠标创建图像的绘图应用程序。您可以用模拟录制模式相对于屏幕或特定窗口进行录制。
       
    相对于指定窗口录制 - 如果对其执行操作的对象位于一个窗口内部而且该窗口在模拟录制会话期间没有移动。这可以确保在运行会话过程中,QuickTest 将准确地标识在其上执行模拟步骤的窗口位置,即使当您运行模拟步骤时窗口位于不同的位置。QuickTest 不会录制在指定窗口外部执行的任何单击或鼠标移动。当使用这种模式时,QuickTest 不会捕获任何 Active Screen 图像。
       
    相对于屏幕录制 - 如果在其上录制模拟步骤的窗口在录制过程中移动,或者您所执行的操作是针对位于多个窗口内的对象。这可能包括将对象从一个窗口拖放到另一个窗口中。当使用这种模式时,QuickTest 将捕获您在其中进行录制的窗口的最终状态的 Active Screen 图像。
       
    使用模拟录制录制的步骤被保存在单独的数据文件中。该文件与在其中录制模拟步骤的操作或组件一起存储。
       
    当以模拟录制模式进行录制时,QuickTest 将向测试或组件添加一个调用所录制的模拟文件的“RunAnalog”语句。相应的 Active Screen 将显示在模拟录制会话期间执行的最后一个模拟步骤的结果。
    low-level recording(
    低级录制)
       
    使用低级录制在不受 QuickTest 支持的环境或对象上进行录制。当您需要在应用程序屏幕上录制操作的精确位置时,请使用低级录制。当以正常模式录制时,QuickTest 将在对象上执行步骤,即使该对象已经移动到屏幕上的新位置。如果对象的位置对于您的测试或组件非常重要,请切换到低级录制以使 QuickTest 能够按照屏幕上的 x 坐标和 y 坐标录制该对象。这样,该步骤只有在对象位于正确的位置时才能通过。

       
    当使用低级录制时,QuickTest 将所有父类对象录制为 Windows 测试对象,将所有其他对象录制为 WinObject 测试对象。它们在 Active Screen 中显示为标准 Windows 对象。低级录制对每个测试对象支持下列方法:
    WinObject 测试对象 - ClickDblClickDragDropType
    Window
    测试对象 - ClickDblClickDragDropTypeActivateMinimizeRestore
    Maximize
       
    低级录制模式录制的每个步骤都显示在关键字视图和专家视图中。(模拟录制仅录制关键字视图中那个调用外部模拟数据文件的步骤。)

    模拟录制和低级录制的规则
       
    模拟录制和低级录制产生的脚本无法插入检查点,而且应用程序界面稍有变动则脚本无法正常运行,所以非万不得已(QTP正常支持的B/S结构以外的情况)应该避免这两种录制方式。有时候因为无法正常录制或者无法正常运行,初学者就可能考虑使用这两种方式录制,事实上,只要是C/S(其实部分结构简单一点的B/S)结构,基本上都能够避免所遇到的这些问题,具体方法,参见第二部分。

    当选择模拟录制低级录制时,请考虑下列规则:

    只有当 QuickTest 的正常录制模式不能准确录制您的操作时,才应使用模拟录制低级录制模拟录制低级录制要求比正常录制模式更多的磁盘空间。对于特定的步骤,您可以在录制会话期间切换到模拟录制低级录制。在以模拟录制低级录制模式录制了必要的步骤之后,就可以返回到正常录制模式来完成录制会话的其余部分。

  • [论坛] QTP--方法的重载

    2009-05-31 19:39:14

    下面是我的代码:

    ==============================================================
    SystemUtil.CloseProcessByName("iexplore.exe")
    SystemUtil.Run "iexplore.exe","www.baidu.com",,,3

    Set Bro = description.Create()
    Bro("title").value = ".*"

    Function  Myclose(obj,x)
            MyClose=obj.close(x)
            msgbox"Myclose"
    End Function

    RegisterUserFunc "Browser","Close","Myclose"
    Browser(Bro).Close
    UnRegisterUserFunc "Browser","Close"
    ==============================================================

    QTP应该支持方法的重写,但是Browser的close方法为什么不能重写?

    [ 本帖最后由 fei.ge 于 2009-5-19 17:07 编辑 ]
  • [论坛] QTP--debug

    2009-05-21 14:05:58

    序:QTP脚本写完或部分写完后,我们需要对脚本进行调试,要调试那么我们就需要QTP的debug功能。

    1、        安装完成QTP后有可能我们的QTP没有debug功能,那么我们该怎么办呢?
    <<<原因出在没有安装QTP的debug模块,所以需要我们安装的dbg10chs.exe。

    2、        在调试脚本的时候,我们需要中断脚本的执行,所以就需要设置断点
    a)        设置一个断点,点击debug—insert/remove Breakpoint (快捷键是:F9)
    就可以在这段脚本前设置一个断点了。当脚本运行到这里时会自动停止,并接受你继续运行的指令。
    b)        注释/取消注释  一个断点,点击debug---Enable/disable Breakpoint (快捷键是:Ctr+F9)
    我们可以通过这种方式把断点注释掉或恢复。
    c)        清除断点,点击debug---clear all Breakpoints(快捷键是:Ctr+Shift+F9)
    我们通过这种方式把断点都清空。
    d)        注释/取消注释  全部断点,debug---Enable/disable all Breakpoints

    3、        设置完断点,我们就需要执行,执行方式分以下几种
    a)        直接点击Run(快捷键是:F5),这种执行会一直执行下去,在遇到断点的地方才会停止
    b)        单步运行debug---step into(快捷键是: F11),这种执行每按一下F11脚本就执行一步
    c)        单步运行过程中,遇到函数,如果我们一直单步运行,那么就会进入到运行到函数内部去,但是如果我们想跳过函数呢?<<<这就需要step  over
    d)        单步运行过程中,如果我们已经进入函数单步运行了,这时我们又希望跳出函数,怎么办呢?<<<这就需要step  out

    4、        我们需要观察脚本在运行过程某些变量的动态变化值,该怎么办呢?
    <<<我们需要debug---add  watch,在name列添加你需要的观察的变量,而value列显示的就是此变量动态变化的值。


    未命名.JPG
            


    ========================================================================================
    当然我们在做实际WEB项目的过程中,调试脚本的时候,我们还常利用下面的方法来调试:
    1、        通过msgbox ;print,来输出需要观察的变量的值
    2、        如果遇到不知道对象存不存在的时候,该怎么办呢?
    <<<我们常用msgbox object.exist来观察,如果存在的话,那么会弹出true,不存在是false。
    3、        问题同上
    <<<我们也会用object.highlight高亮的方法来判断对象存不存在。
  • QTP--SQLserver(转)

    2009-05-21 14:04:45

    QTP中MS SQL SERVER数据库连接的一种简单方法

    在QTP中,我们可以通过复制数据库数据到databable中,实现数据的参数化.但这样的做法往往比较烦琐.换一种思路,在Expert View中直接添加连接数据库代码如何?接下来,我们就来完成这个工作.

      对于MS sql server数据库的连接,我们首先要知道所用的MS sql server数据库的连接字符串.这里告诉大家一个轻松获取连接字符串的方法: 新建.txt文件,修改文件名(包括后缀)为XX.udl,双击打开XX.udl文件,在"Provider"选项中选择"Microsoft OLE DB Provider for SQL Server",在"Connection"中,选择相应的server name和database,有用户名和密码的输入用户名和密码,点击右下方的"Test Connection"验证数据库是否连通.点击"OK".把XX.udl文件用记事本方式打开,以"Provider"开始的部分就是你的数据库连接字符串.

      知道了连接字符串,接下来我们来完善代码部分.

      Dim Cnn //定义变量

      Dim Rst //定义变量

      Dim strCnn //定义变量

      strCnn="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=test;Data Source=SIMONVM" //将获得的连接字符串赋值到

      strCnn Set Cnn=CreateObject("ADODB.Connection") //生成数据库连接对象

      Cnn.Open strCnn //打开数据库 Set Rst=CreateObject("ADODB.Recordset") //生成记录集对象  

      Rst.Open "select OrgName from Organization",Cnn //书写SQL语句

      Rst.MoveFirst //将焦点定在第一行

      还可以通过Rst.Field( )函数取出对应行的值(参看QTP Tutorial Help).

      对于以上代码,我只是完成了MS sql server数据库的连接和执行命令部分.后续对表格的应用还未涉及.希望大家指点和补充.
  • QTP 同步点

    2009-05-18 10:22:47

        在用QTP的过程中,常常因为某个控件刷新时间过长,我们会人为的加上wait()方法.该方法虽然可以起到我们想要的作用(让QTP)等待我们所需要的控件出现再往下继续执行,但缺点是.时间比较困定.往往wait里的时间参数,是我们根据经验估计出来的,即使该控件在我规定的时间内已经程现出来,QTP还是会等到wait中的时间到达后,才往下继续执行,浪费了很多时间.这个时候就会想到用waitproperty 方法.waitproperty的语法格式如下:

    Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").WebElement("Flight Confirmation #").WaitProperty"visible", true, 10000

    在规定的时间段(10秒)内,QTP会不停的检测WebElement的visible属性是否为true.如果在10秒内QTP检测到visible==true那么,将立即往下执行,在这种情况下就比我们用wait指定一个固定的时间段效率要高的多.需要注意的是:如果在规定的时间(10秒)内未能检测到所需结果,该语句将返回一个false,但并不影响程序继续执行.

  • QTP培训总结

    2008-12-17 11:42:28

    1.启动

    SystemUtil.Run和InvokeApplication

    例子:

    SystemUtil.Run "D:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"

    InvokeApplication "D:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"

    SystemUtil.Run "iexplore.exe","www.baidu.com",,,3

    InvokeApplication "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.cn/"

    2.设置环境参数,并读取

    1)手动设置:file-settings-environment,选择build in,添加参数和值,并可以导出为xml文件

    2)可以自己直接创建修改xml文件,格式如下:

    xml文件的格式为:

    ================================================

    <Environment>
     <Variable>
      <Name>UserID</Name>
      <Value>founder</Value>
     </Variable>
     <Variable>
      <Name>pwd</Name>
      <Value>112</Value>
     </Variable>
    </Environment>

    =================================================

    3)通过语句读xml文件,并设置为环境参数

    例子:

    Environment.LoadFromFile "G:\qtpscrīpt\peixun\test.xml"
    Dim tmp_ID,tmp_pwd
    tmp_ID= Environment.Value ("UserID")
    tmp_pwd= Environment.Value ("pwd")
    msgbox environment.ExternalFileName
    msgbox tmp_ID
    msgbox tmp_pwd

    4)优点:任何action可以调用。

    如:设置路径为环境参数,以后脚本转移了,直接修改xml里路径的值就可以了。(?待实践)

    3.导出QTP的EXCEL文件,读取默认格式的xls文件(有Global,Action1)

    例子:导出excel文件,读取文件,并读取具体字段

    Dim tmp_pwd
    Datatable.Export "G:\qtpscrīpt\peixun\test.xls"                                                
    Datatable.Import "G:\qtpscrīpt\peixun\test.xls"
    tmp_pwd = datatable.RawValue("Password","Action1")
    msgbox tmp_pwd

    4.读取自己定义的xls文件

    例子:读取自己定义的xls文件,取值

    自己定义的xls文件,取出,替换到ACTION1的值。
    Datatable.ImportSheet "G:\qtpscrīpt\peixun\test1.xls",1,"Action1"  
    '设置当前读取第几行     
    datatable.SetCurrentRow(2)   
    tmp_pwd=Datatable.RawValue("Password","Action1")                            
    msgbox tmp_pwd
    Dim tmp_user 
    tmp_user=datatable.RawValue("UserID","Action1")
    msgbox tmp_user

    5.显示当前执行excel的行数

    Dim tmp
    datatable.SetCurrentRow(2)
    datatable.SetPrevRow
    datatable.SetNextRow
    tmp=datatable.RawValue("row","Action1")
    msgbox tmp
    tmp=datatable.RawValue("row","Action1")
    msgbox tmp

    6.语句调用vbs函数

    ExecuteFile  "c:\my.vbs"
    (注:我的QTP9.5版本不行)

    7.for循环

    Dim i,j
    For i=1 to 10 step 5
     For j=1 to 10
      print"j."&j
     Next
    Next

    8.重写方法

    例子:

     Function MySet(obj,x)
       MySet=obj.set(x)
       msgbox"Myset"
     End Function

    RegisterUserFunc "WinEdit","Set","MySet"
    Dialog("Login").WinEdit("Agent Name:").Set "founder"
    UnRegisterUserFunc "WinEdit","Set"

    练习:代替click动作

    Function MyClick(obj,x)
      mySet=obj.click(x)
      msgbox"Myclick"
    End Function

    RegisterUserFunc "WinButton","Click","MyClick"
    Dialog("Login").WinButton("OK").Click
    UnRegisterUserFunc "WinButton","Click"

    9.输出值

    Dialog("Login").WinEdit("Agent Name:").Output CheckPoint("Agent Name:_4")
    Dim temp
    temp=datatable.RawValue("name","Action1")
    msgbox temp

    10.同步点

    Dim temp
    temp=Window("Flight Reservation").WinComboBox("Fly From:").Check( CheckPoint("Fly From:_2"))                  '?????????加+正则表达式??
    msgbox temp

    11.给action设置参数

    手动到Keyword View页面,对action右键-action properties-Parameters,添加参数

    msgbox parameter.Item ("userid")

    ps:调用Action的方法。。?

    12.描述性编程

    方法一

    sName="Login"
    Dialog("text:="&sName,"Class Name:=Dialog").WinEdit("attached text:=Agent Name:").Set parameter.Item ("userid")
    Dialog("text:=Login","Class Name:=Dialog").WinEdit("attached text:=Password:").SetSecure  parameter.Item("password")
    Dialog("Login").WinButton("OK").Click

    方法二

    set AgentName = Descrīption.Create()
    AgentName("attached text").Value = "Agent Name:"
    Set MyObj=Descrīption.Create()
    MyObj("text").Value="Login"
    MyObj("class name").value="Dialog"


    Dialog(MyObj).WinEdit(AgentName).Set parameter.Item ("userid")
    Dialog(MyObj).WinEdit("attached text:=Password:").SetSecure  parameter.Item("password")
    Dialog(MyObj).WinButton("text:=OK").Click

Open Toolbar