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 ========

 

 

你可能感兴趣的:(程式测试)