前些時間玩了一下三國風雲遊戲,因為每天基本上都會去重複的做一些事情,是以用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 ========