天天看点

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