前些时间玩了一下三国风云游戏,因为每天基本上都会去重复的做一些事情,所以用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 ========