天天看點

轉載-QTP代碼

生産随機數列

第一種方法

randomize'更新反回的資料

funcation rand(k)

n=int((k-1)*rnd+1)

rand=n

end funcation

第二種方法

n=randomnumber.value(1,255)

2  當運作到表中的 某一行,自動導出表中的所有資料

row=datatable.getcurrentrow

if row="5" then

  datatable.export("d:/data.xml")

end if

3

webedit("txtpass").setsecure"sdsdf...."

如果參數化密碼,可以直接在 資料表中寫入未加密的密碼,它會自動識别,即不用把setsecure改為set

4 如果彈出對話框就擷取上面提示資訊并與表中的資訊對 比,不統一證明彈出的提示出錯,主要用來驗證

if browser("web_name").dialog("dialog_name").exist(1) then'如果不出現=false

     error_message=browser("web_name").dialog("diaglog_name").static("使用者密碼 錯誤!".getRoproperty("text")

   if error_message<>(datatable.value("error_info"))then

         msgbox(error_message)

      end if

     browser("web_name").dialog("diaglog_name").close

  end if

這裡我總結 了兩點技巧 :

   一是:對于dialog中,雖然提示資訊對象名稱是"使用者密碼錯誤",但如果資訊對象名稱是“該使用者不存在”,不用更改會自動識别,我想主要是錄制第一 遍時,“使用者密碼錯誤”隻是讓運作時能找到這個控制,而不管它是什麼内容,因為在對象倉庫中,text不是決定該對象的屬性

    二是:如果對于提示資訊比較長的,可以用mid(error_message,n,m)取一部份特征提示資訊進行驗證,這樣我想可以節省處理時間,又可以 避免長度以及空格等字元的處理

5  datatable.value("num")隻在global形式下的一種省略形式;完整形式是:

datatable.value("num",dtlocalsheet)

----- 向某一列的單元格指派:

datatable.value("column_name",dtlocalsheet)="nanjing"

----- 取得某一行具體值:

datatable.setcurrentrow(n)

msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)

或 者kk=datatable.Rawvalue("column_name","action1")

----在run-time時,動态 添加表格與資料

kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;

7   wintreeview一些操作

選擇一個條目:wintreeview.select(item)'根是0

根的名 稱:wintreeview.getitem(0)

8   資料庫檢查點子產品:

sub database_check

set con=createobject("adodb.connection")

con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_

                 "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"

'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:/test .mdb"

'Orocle 方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"

set record=createobject("adodb.recordset")

sql ="select*from ibm_one_table"

record.open sql,con

DO

if(record("ibm_table_column")="kai")then'// 查找表格中有多少kai

num=num+1;

end if

record.movenext

loop until record.eof=true

record.close

set record=nothing

con.close

set con=nothing

end sub

9   換行符

    vbcr----chr(13)回車符// vblf----chr(10)換行符

    vbcrlf----chr(13)+chr(10)結合//type(chr(13)就相當于按了一上鍵盤上的enter

10  Run from step有兩種方式:

在Keyword View模式會從本步驟運作到所有action結束

在expert view模式僅會将本action運作結束

11  由于對象屬性原因,無法識别對象

-----對于對象屬性是變化的,可以參數化 /或者用正規表達式

-----報比對多個對象錯誤,可以spy檢視對象,添加一個該對象另一個唯一辨別屬性

-----有時可以删除對象的 變化的屬性來解決識别問題

------對于多個完全相同的對象,可以采用添加index,location,createtime等特殊屬性來識 别

  (index:按照程式源碼 ,繪制對象 的先後辨別對象,是以與其它 相同對象是互相依 賴,當其它對象發生

  變化後,原先的所有對象index屬性要發生變化,開始是0;如index:=0;

        location:根據對象的位置進行确定,從上到下,從左到右;

  CreateTime:按照對象被浏覽器打開的先後辨別對象)

------ 另外換一種思維方式,采取等效的方法;比如用鍵盤代替滑鼠或用作業系統 本身特性去解決問題

12  對系統文 件的操作

-------從系統的檔案中擷取資訊及删除檔案

  get_file_infor("c:/she.mpg")

   function get_file_infor(url)

    dim fso,f

    set fso=createobject("scripting.filesystemobject")

    set f=fso.getfile(url)

    f.name:f.size:f.type:f.datacreated'///擷取檔案資訊

    fso.deletefile(url)'/删除檔案

   end function

--------擷取檔案夾裡所有文 件資訊

get_folder_infor("c:/kai")

function get_folder_infor(folder)

dim fso,f,f1,n

set fso=createobject("scripting,filesystemobject")

set f=fso.getfolder(folder)

set fc=f.files

for each f1 in fc

selectcase f1.name

case"kai.mpg","she.mpg","dd.mp3 "'//檢查檔案夾裡是否含 有這些檔案

end select

next

end function

13   等待某個對象出現方法

y=......waitproperty("visible",true,10000)

14   防程式中斷方法

On error resume next

On error goto handle

15  數組的 應用:

name=array(1,2,"aa","bb")

name(2)="aa"

16  正規表達式應用模闆

進行日期YYYY-MM-DD的格式檢查 :

Function RegExpTest(patrn, strng)

  Dim regEx, Match, Matches      ' Create variable.

  Set regEx = New RegExp         ' Create a regular expression.

  regEx.Pattern = patrn         ' Set pattern.

  regEx.IgnoreCase = True         ' Set case insensitivity.

  regEx.Global = True         ' Set global applicability.

  Set Matches = regEx.Execute(strng)   ' Execute search.

  For Each Match in Matches      ' Iterate Matches collection.

    RetStr = RetStr & "Match found at position "

    RetStr = RetStr & Match.FirstIndex & ". Match Value is '"

    RetStr = RetStr & Match.Value & "'." & vbCRLF

  Next

  RegExpTest = RetStr

End Function

date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1/d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"

result_message=RegExpTest(date_pattern, inputbox("請你輸入要檢查的時間:"))'用其它正規表達式更改此處

Select case result_message

Case ""

         msgbox("你輸入的日期格式與标準不比對")

case else  MsgBox(result_message)

end select

17   傳回一個字元串在另一字元串中的位置

instr(string1,string2)

18   有時回放出現找不到對象時,可能不是由于你的代碼問題,而是由于你的作業系統等設定問題;

舉例說明1:

比如:你錄制一個選擇磁盤中的 檔案動作

會錄制為:

.winlistview("  ").drap 46,99

.winlistview("  ").draponitem "she.mp3"

下次錄制的時候,如果你的系統檔案改為不顯示擴充名,下次執行的時候,QTP 就 找不到she.mp3,隻能找到she;

舉例說明2:

有時由于不同作業系統以及不同的ie,導緻有些視窗不能識别,比如在2000下彈出 的網頁對話框的标題是:

“web 對 話框",而在2003上是”網頁對話框"

19  "is+*"類型function

isarray'是否是數組

isconnected' 判斷QTP是否連接配接到TD

isdate'是否是合法的日期類型

isempty'判斷是否初始化

isNull'判斷是否為空值

isNumeric' 判斷是否是數字型

isobject'判斷是否一個功能對象

isready'判斷裝置是否準備就緒

isRootFolder'是否 是根目錄

20 Action之間的參數傳遞

例如:在Action1中,有如下代碼:

out_str="This is out_string"

RunAction "Action2",oneIteration,out_str

在Acton2中,在其 step->Action Properties中的,input參數欄,加入out_str後,

msgbox(parameter("out_str")), 就能正确顯示參數了 

21 WScript.Shell的一些應用

set WshShell =CreateObject("WScript.Shell")

WshShell.SendKeys "{ENTER}"     '模拟鍵盤進行操作

WshShell.AppActivate "Calculator"             '啟動應用程式

22 擷取對象屬性名稱用法:

GetRoProperty----從應用程式界面上擷取對象屬性(即,是腳本運 行時,擷取的對象動态屬性值)

           例如:擷取對象庫中index屬性值,似乎隻能用GetToProperty,因為應用程式界面上對象沒有該屬性,隻是

      QTP 為識别該對象創立的描述屬性;

GetToproperty----從對象庫中描述對象的屬性,靜态值

GetToProperties---- 擷取用于辨別對象的屬性集;對于這個集合,有count等屬性方法

23 FireEvent的使用

可以對一個對象進行更複雜的操 作

如:FireEvent("onfocus")   '使一個控件擷取焦點

     FireEvent("ondblclick")  '實作輕按兩下/也可以在事件設定中針對該對象事件響應  

24 模闆的應用

----- 建立一個文本,輸入一些建立Action時常包含的資訊,然後儲存為ActionTemplate.MST檔案,

 并複制到QTP/dat目錄 下;這樣每次建立action都會包含固定的資訊了;

例如:

'-------------------腳本說明 ---------------

'産品版本:      __Build(  )

'測試員:

'編寫日期:

'測試功能:

' 腳本類型:

'被測試 對象初始狀态:

' 進展程度:

'基本思路:

'主要功能函數:

'曆史修改:

'沒解決的問題:

'-------------------- 腳本内容-------------

25 在對象庫中,兩個對象有時不能通過更改屬性或命名來達到兩個對象完全一緻的替換;

在 web-mod項目中,我在對象庫裡添加了一個自動含有index辨別屬性的對象,然後每次通過SetToproperty來改變

index值, 對對象進行資料驅動,使其操作另一個對象,但腳本始終操作原先index屬性值的對象;後來,把該對象

删除掉,重新添加一個不自動含有index 辨別屬性的該類對象,然後,手工添加,index辨別屬性,後來腳本能正常 工 作 了,可見兩次的對象屬性完全一緻,但形成方式不一樣,導緻的結果往往也不一樣;

26 childobject的應用

childobject可以傳回界面上滿足條件的對象集合,而且與對象庫裡是否有這些對象無關,這就可以簡化對象 庫;

傳回的對象集合的count方法可以傳回對象個數,這就可以通過下标對單個對象進行操作;在出現index辨別對象時

可以進行運用

如:Set m_WinCheck=Description.Create()

      m_WinCheck("nativeclass").Value="Button"

      set All_WinCheck=Window("").Dialog("").Childobject(m_WinCheck)

      n=All_WinCheck.Count()

     for i=0 to n-1

      All_WinCheck(i).Set "ON"

     next

Create Log File:

Dim LOGFile, fso, MyFile

LOGFile="C:/Log.txt"

Set fso = CreateObject("Scripting.FileSystemObject")

    If fso.FileExists(LOGFile) = False Then

           Set MyFile = fso.CreateTextFile(LOGFile, True)

           MyFile.Close

    end if

Set MyFile = fso.OpenTextFile(LOGFile, 8, True)

MyFile.WriteLine("")

MyFile.WriteLine(" " & Cstr(Now) & " ---------------------------------------------------------")

MyFile.WriteLine("LOG Information!")

MyFile.Close

資料輸入輸出方法

資料輸入輸出的方法:

1  ExecuteFile"e:/kk.vbs"

2  Environment.LoadFromFile("e:/k.xml")

3  Datatable.ImportSheet/Import

4  GetData from DataBase

5  Datatable autofill

6  Action input/output

7  Use GetxxProperty to get data from Object

8  Use Some Function to Product data

插入同步等待某個對象出現

Dim continue

continue=false

While not continue

        wait(1)

        continue=Window("航班預訂").Exist

Wend

異 常控制

If Window("航班預訂").Dialog("航班預訂").Exist Then

        Set myStatic=Description.Create()

        myStatic("nativeclass").Value="Static"

        Set myObject=Window("航班預訂").Dialog("航班預訂").ChildObjects(myStatic)

        erroInfo=myObject(0).GetROProperty("text")

        Reporter.ReportEvent micFail,"時間輸入",erroInfo

        Window("航班預訂").Dialog("航班預訂").WinButton("确定").Click

        ExitActionIteration

End If

對于 bblong 斑竹在 11 樓的文章,我感覺有點問題。

Dim continue

continue=false

While not continue

        wait(1)

        start=Window("航班預訂").Exist

Wend

上 面的代碼的目的是插入同步等待某個對象出現。可是,continue = false, not continue = true,循環體中間又沒有改變continue 的語句,那麼While 到Wend 之間的代碼是永遠循環進行下去的,此循環什麼時候結束呢?是以,我想   start=Window("航班預訂").Exist 是否改為  continue = Window("航班預訂").Exist  呢?

轉自 http://www.51testing.com/?uid-273596-action-viewspace-itemid-211287

繼續閱讀