天天看點

QTP--自動化測試之--自動化玩網頁遊戲

 前些時間玩了一下三國風雲遊戲,因為每天基本上都會去重複的做一些事情,是以用QTP9.5 寫一了下角本來實作自動化出兵掃羊,哈哈,手動掃一次羊至少得用半個小時吧(因為家裡兵還蠻多的),自動化後,不到5分鐘就完了,而且還是自動完成!今天我已經不玩此遊戲了,share 出來給大家,希望對大家的自動測試--玩遊戲有一定的幫助!以下為代碼!

'  功能:主城出兵掃羊_資料集方式

strCityNameGloabal = datatable.GetSheet(1).GetParameter(1)   '  取目前要操作的城鎮名     

WaitHomePageLoad    '  等首頁網頁打開 

ChooseCity strCityNameGloabal, strCityNameGloabal  '   選擇相應城鎮 , 并等待頁面的出現 

clickCityMapAndWaitWebLoad  strCityNameGloabal   '  點選“城鎮”,并等待   “中軍賬”出現

'  從excel表格中導入相應的出兵的 sheet 表到第二張表中

srcGSheet = datatable.GetSheet(1).GetParameter(2) 

ImportTableFromXLS  "出兵順序表.xls",   srcGSheet 

dispatchSoilderToTarget    '  從軍營直接出兵

'  一個城鎮出兵結束,并關掉頁面,重新做下一個城市

Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Sync

Browser("三國風雲 - 曠世逸才").Close

wait 3

'   ===============================================================================================================

'   ===========================================  以下是各個子過程或函數  ===========================================

'==========  從軍營直接出兵   ========

Sub dispatchSoilderToTarget () 

 numberRowCount = datatable.GetSheet(2).GetRowCount   '   取要執行的行數

 For i=1 to numberRowCount  

     '   檢查坐标值資料正确性 

  If  ChkDataAvailable = false Then 

   Exit for

  End If

  ClickBarback  strCityNameGloabal   '    點選   “中軍賬” ,并等待  "中軍帳對話框"   的出現

  clickHeadquarters   ' 點選   “調兵遣将” ,并等待  "調兵遣将Tab"   的出現

  If InputCoordinateXY  = false then'   輸入 x    y 坐标和出兵數量

   msgbox "輸入 x    y 坐标和出兵數量錯誤"

   Exit for  ' 如果出錯,就執行下一張表!

  end if

  wait 1

  ' 點選   “出征” ,并等待  "出征Tab"   的出現

  '  可能會出現三種情況

  '   1. 系統提示

  '   2. 您的傳令兵部隊已達上限,請更新中軍帳!

  '   3.出發   按鈕的出現

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link("出征").Click

  wait 1

 '  檢查是否出現可以出兵,是 - - 則自動執行出兵,否 - - 人工處理

 bl_chk_outSoldier =  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("出兵概況").Check (CheckPoint("出兵概況"))

 If  bl_chk_outSoldier Then

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link("出發").Click

 else

  msgbox "請人工參與!,  并請自決定如何處理!"

  wait 5

 End If

 Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("關閉中軍賬").Click

 datatable.SetNextRow

 next

End Sub

'==========  從軍營直接出兵  end  ========

'==========  輸入 x    y 坐标和出兵數量  ========

'   輸入 x    y 坐标和出兵數量

function  InputCoordinateXY()

  '   輸入 x    y 坐标

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("x").Set  datatable.GetSheet(2).GetParameter("x坐标")

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("y").Set  datatable.GetSheet(2).GetParameter("y坐标")

  soldierNum = datatable.GetSheet(2).GetParameter("數量")

  '   選擇出兵數量

  Select Case datatable.GetSheet(2).GetParameter("出兵兵種")

   case "樸刀兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier0").Set soldierNum  ' 樸刀兵

      chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier0").CheckProperty("value",soldierNum)

   case "重步兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier1").Set soldierNum  ' 重步兵

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier1").CheckProperty("value",soldierNum)

   case "近衛兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier2").Set soldierNum  ' 近衛兵

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier2").CheckProperty("value",soldierNum)

   case "輕騎兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier3").Set soldierNum  ' 輕騎兵

      chkSoldierNum =  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier3").CheckProperty("value",soldierNum)

   case "青州兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier4").Set soldierNum  ' 青州兵

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier4").CheckProperty("value",soldierNum)

   case "沖車"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier5").Set soldierNum  ' 沖車

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier5").CheckProperty("value",soldierNum)

   case "霹靂車"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier6").Set soldierNum  ' 霹靂車

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier6").CheckProperty("value",soldierNum)

   case "說客"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier7").Set soldierNum  ' 說客

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier7").CheckProperty("value",soldierNum)

   case "墾荒者"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier8").Set soldierNum  ' 墾荒者

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier8").CheckProperty("value",soldierNum)

   case "斥候騎兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier9").Set soldierNum  ' 斥候騎兵

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier9").CheckProperty("value",soldierNum)

   case "長弓兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier10").Set soldierNum  ' 長弓兵

      chkSoldierNum =  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier10").CheckProperty("value",soldierNum)

   case "弓騎兵"

      Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier11").Set soldierNum  ' 弓騎兵

       chkSoldierNum = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebEdit("soldier11").CheckProperty("value",soldierNum)

    Case else

     msgNum = soldierNum

     reporter.ReportEvent micFail ,"選擇出兵兵種錯誤!", "資料集表中的兵種參數錯誤!請檢查兵種類型是否正确!資料為: " &chr(10)&chr(13)&  msgNum

    'msgbox  "資料集表中的兵種參數錯誤!請檢查兵種類型是否正确!"&chr(10)&chr(13)&  soldierNum

     InputCoordinateXY = false

    exit  function

  End Select

  If  chkSoldierNum = false  Then

   msgbox "輸入兵數量不正确。。。"

   InputCoordinateXY = false 

  End If

  InputCoordinateXY = true 

End function

'==========  輸入 x    y 坐标和出兵數量 end  ========

'========== 點選   “調兵遣将” ,并等待  "調兵遣将Tab"   的出現  ========

' 點選   “調兵遣将” ,并等待  "調兵遣将Tab"   的出現

Sub clickHeadquarters  ()    

  For i = 1 to 10

   Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link("調兵遣将").Click

'   bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("點選綠色數字可直接填入對應數量【全軍出擊】")._

'             Check (CheckPoint("點選綠色數字可直接填入對應數量【全軍出擊】"))

bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("點選綠色數字可直接填入對應數量【全軍出擊】").Exist(3)

   If bl_chk_loadWeb Then

    Exit sub  ' 如果檢查成功,就退出

   else

    msgbox "調兵遣将Tab沒有出現!!"

    wait 1   '   否則

   End If

  Next

  msgbox "出現異常!請人工幹預!"

End Sub

'========== 點選   “調兵遣将” ,并等待  "調兵遣将Tab"   的出現  end========

'==========  檢查坐标值資料正确性   ========

'   檢查坐标值資料正确性

function  ChkDataAvailable ()

  '  如果坐标值不正确,退出FOR

   x = datatable.GetSheet(2).GetParameter("x坐标")

   y = datatable.GetSheet(2).GetParameter("y坐标")

  If  ( not  isnumeric(x)) or  (not  isnumeric(x) )   Then

   reporter.ReportEvent micFail, "檢查X和Y的坐标值正确性", "ewq"

   msgbox  "請檢查X和Y的坐标值正确性"

   ChkDataAvailable = false

   Exit function

  else

   x = cint(x)

   y = cint(y)

   If x<100 or y<100  Then

    reporter.ReportEvent micFail, "檢查X和Y的坐标值正确性"

    ChkDataAvailable = false

    Exit function

   End If

  End If

  ChkDataAvailable = true

End function

'==========  檢查資料正确性  end  ========

'==========  導入相應城鎮的出兵次序  ========

'  功能:根據global表的資訊導入相應城鎮的出兵次序

Sub ImportTableFromXLS (filename,  srcSheet )

 datatable.ImportSheet filename,cint(srcSheet),2

End Sub

'==========  導入相應城鎮的出兵次序  end ========

'==========  等首頁網頁打開  ========

'  等首頁網頁打開

Sub WaitHomePageLoad ()

 Do

  bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("城内駐軍 重新整理 防禦陣型").Check (CheckPoint("城内駐軍 重新整理 防禦陣型"))

  If  bl_chk_loadWeb = false Then

   wait 1

  End If

 Loop while (bl_chk_loadWeb = false )

End Sub

'==========  等首頁網頁打開  end  ========

'==========  '   選擇相應城鎮 , 并等待頁面的出現  ========

'   選擇相應城鎮 , 并等待頁面的出現

Sub ChooseCity (cityName, chkChooseCity)

   If  cityName="" or cityName= null Then

    msgbox "要選擇的城鎮名異常,請驗證後再作處理!"

    wait 5

   End If

   If cityName <> "[主城]1_聯想(主城)" Then

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link("城鎮清單").Click

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link(cityName).Click

   End If

 wait 1

 ' 等待城鎮選擇框的通過

 Do

  bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("城鎮選擇框").CheckProperty( "innertext",chkChooseCity, 2)

  'bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("城鎮選擇框").Exist(5)

  If  bl_chk_loadWeb = false Then

    wait 1

  End If

 Loop while (bl_chk_loadWeb = false )

End Sub

'==========  '   選擇相應城鎮 , 并等待頁面的出現  end ========

'==========  '   點選“城鎮”,并等待   “中軍賬”出現   ========

Sub clickCityMapAndWaitWebLoad ( strChkBarbackLoadOBJName)

 Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebElement("城鎮_圖示").Click

   Do

  bl_chk_loadWeb =  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebArea(strChkBarbackLoadOBJName).CheckProperty("map name", "citymap",5)

        If  bl_chk_loadWeb = false Then

   wait 1

  End If

 Loop while (bl_chk_loadWeb = false )

End Sub

'==========  '   點選“城鎮”,并等待   “中軍賬”出現  end========

'==========  點選   “中軍賬” ,并等待  "中軍帳對話框"   的出現 ========

'    點選   “中軍賬” ,并等待  "中軍帳對話框"   的出現

Sub  ClickBarback (cityName)

  '    點選   “中軍賬” ,并等待  "中軍帳對話框"   的出現

  Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").WebArea(cityName).Click

  Do

   bl_chk_loadWeb = Browser("三國風雲 - 曠世逸才").Page("三國風雲 - 曠世逸才").Link("調兵遣将").Check (CheckPoint("調兵遣将"))

   If  bl_chk_loadWeb = false Then

    wait 1

   End If

  Loop while (bl_chk_loadWeb = false )

End Sub

'==========  點選   “中軍賬” ,并等待  "中軍帳對話框"   的出現  end ========