moaTest.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. # -*- coding: utf-8 -*-
  2. import os,unittest,copy
  3. from appium import webdriver
  4. from time import sleep
  5. PATH = lambda p: os.path.abspath(
  6. os.path.join(os.path.dirname(__file__), p)
  7. )
  8. # desired_caps = {}
  9. # desired_caps['platformName'] = 'Android'
  10. # desired_caps['platformVersion'] = '4.2.3'
  11. # desired_caps['deviceName'] = '7bbe99db'
  12. # # desired_caps['app']=PATH('D:\AutoTest\ppp\winsoft.apk')
  13. # desired_caps['appPackage'] = 'cn.wswin.moa'
  14. # desired_caps['appActivity'] = '.ui.activity.SplashActivity'
  15. # desired_caps['unicodeKeyboard'] = True
  16. # desired_caps['resetKeyboard'] = True
  17. #
  18. # driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  19. #捕获异常
  20. def elementIsExit(self,element):
  21. try:
  22. self.driver.find_element_by_name(element)
  23. except BaseException,e:
  24. print e
  25. return False
  26. return True
  27. def changeListTree(listTree):
  28. listTreeName = []
  29. for i in listTree:
  30. listTreeName.append(i.text)
  31. return listTreeName
  32. def listIsDif(newList,oldList):
  33. newListName = changeListTree(newList)
  34. oldListName = changeListTree(oldList)
  35. # newListName中有而oldListName中没有的
  36. difListName = list(set(newListName).difference(set(oldListName)))
  37. print difListName
  38. print '不同路径的长度',len(difListName)
  39. return difListName
  40. #找人
  41. def findOne(self,lookfor,topTree):
  42. findflag = False
  43. copyTreeName = changeListTree(topTree)
  44. toptreeCount = topTree.__len__()
  45. for onetree in copyTreeName:
  46. num = copyTreeName.index(onetree)
  47. currenttreeName = copyTreeName[num]
  48. if elementIsExit(self, currenttreeName):
  49. self.driver.find_element_by_name(currenttreeName).click()
  50. print '程序点击了该路径:', currenttreeName
  51. while True:
  52. otherTree = self.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent')
  53. if elementIsExit(self, lookfor):
  54. print '程序在该路径下找人:', lookfor
  55. findflag = True
  56. # self.driver.find_element_by_name(lookfor).click()
  57. break
  58. elif len(listIsDif(otherTree, topTree)) > 0:
  59. print '发现新的路径:', otherTree
  60. findOne(self, lookfor, otherTree)
  61. elif num < (toptreeCount - 1):
  62. nexttreeName = copyTreeName[num + 1]
  63. print '要查看的下一个路径名称:', nexttreeName
  64. if elementIsExit(self, nexttreeName):
  65. break
  66. else:
  67. print '查询不到下一个路径,需要滑动'
  68. self.driver.swipe(710, 1000, 710, 200) # 往下滑动当前页
  69. else:
  70. print '结束查找'
  71. break
  72. print '出结果了要'
  73. return findflag
  74. # def scanOne(self, target, lookfor):
  75. # topTree = self.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent') # 后期用target替换
  76. # toptreeCount = topTree.__len__()
  77. # # opentree.driver.find_element_by_name(parentTree[0].text).click()
  78. # count = toptreeCount - 1
  79. # for onetree in topTree:
  80. # self.driver.find_element_by_name(onetree.text).click()
  81. # while True:
  82. # if elementIsExit(self, lookfor):
  83. # self.driver.find_element_by_name(lookfor).click()
  84. # # sleep(5)
  85. # break
  86. # elif elementIsExit(self, topTree[(topTree.index(onetree) + 1)].text):
  87. # break
  88. # else:
  89. # self.driver.swipe(680, 1000, 680, 200) # 往下滑动当前页
  90. class PYtest(unittest.TestCase):
  91. @classmethod
  92. def setUpClass(self):
  93. print('--------------start App-------------')
  94. desired_caps = {}
  95. desired_caps['platformName'] = 'Android'
  96. desired_caps['platformVersion'] = '4.3'
  97. desired_caps['deviceName'] = '7bbe99db'
  98. # desired_caps['app']=PATH('D:\AutoTest\ppp\winsoft.apk')
  99. desired_caps['appPackage'] = 'cn.wswin.moa'
  100. desired_caps['appActivity'] = '.ui.activity.SplashActivity'
  101. # desired_caps['appActivity'] = '.ui.activity.MainActivity'
  102. desired_caps['unicodeKeyboard'] = True
  103. desired_caps['resetKeyboard'] = True
  104. self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  105. self.driver.implicitly_wait(5)#全局方法最长超时时间
  106. @classmethod
  107. def py_login(login):#登录测试用例
  108. #忽略引导页存在,手动去掉引导页之后再进行以下所有测试用例
  109. sleep(2)
  110. current_Act = login.driver.current_activity
  111. print current_Act
  112. if current_Act == '.ui.activity.LoginActivity':
  113. print ('login App')
  114. account = login.driver.find_element_by_id('cn.wswin.moa:id/e_user_name')
  115. password = login.driver.find_element_by_id('cn.wswin.moa:id/e_user_password')
  116. btn_login = login.driver.find_element_by_name('登录')
  117. account.clear()
  118. account.send_keys('hgl')
  119. password.clear()
  120. password.send_keys('hegl123456')
  121. btn_login.click()
  122. print ('login App passed')
  123. elif current_Act =='.ui.activity.MainActivity':
  124. print ('app is login')
  125. else:
  126. print ('不知道你在哪个页面')
  127. def py_quitApp(quit):#退出APP
  128. sleep(2)
  129. current_Act= quit.driver.current_activity
  130. print current_Act
  131. if current_Act == '.ui.activity.MainActivity':
  132. print('quit App')
  133. btn_left = quit.driver.find_element_by_class_name('android.widget.ImageButton')#最好不要在判断之前提前定义,会因为找不到对象而报错
  134. if btn_left.is_enabled():
  135. btn_left.click()
  136. btn_quit = quit.driver.find_element_by_name('退出')
  137. if btn_quit.is_enabled():
  138. btn_quit.click()
  139. btn_sure = quit.driver.find_element_by_name('确认')
  140. if btn_sure.is_enabled():
  141. btn_sure.click()
  142. print('quit App passed')
  143. def py_openTree2(opentree):
  144. current_Act = opentree.driver.current_activity
  145. print current_Act
  146. if current_Act == '.ui.activity.MainActivity':
  147. sleep(2)
  148. opentree.driver.tap([(333, 1224)]) # 此处定位在联系人界面
  149. if elementIsExit(opentree,'联系人'):
  150. print ('当前页面位置:联系人界面')
  151. topTree = opentree.driver.find_elements_by_id('cn.wswin.moa:id/tv_item_tree_parent') # 后期用target替换
  152. if findOne(opentree, '王巧巧', topTree):
  153. print '找到人了'
  154. def finishDriver(self):
  155. print('finish Driver')
  156. self.driver.quit()
  157. print('finish Driver passed')
  158. def py_Clicktap1(self):#用例点击事件
  159. self.driver.find_element_by_name('在吗').click()
  160. print('Click Passed')
  161. def py_Swiap(self):
  162. self.driver.swipe(720,700,0,700)
  163. print ('Swip Passed')
  164. if __name__ == '__main__':
  165. suite = unittest.TestSuite()
  166. #需要测试的用例就addTest,不加的就不会运行
  167. # suite.addTest(PYtest('py_Swiap'))
  168. suite.addTest(PYtest('py_login'))#APP登录
  169. suite.addTest(PYtest('py_openTree2'))
  170. # suite.addTest(PYtest('py_quitApp'))#APP登出
  171. suite.addTest(PYtest('finishDriver'))#结束测试
  172. unittest.TextTestRunner(verbosity=1).run(suite)
  173. # timestr = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
  174. # filename = "D:\\AutoTest\\report\\report_" + timestr + ".html"
  175. # fp = file(filename, "wb")
  176. # runner =HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'测试用例详情')
  177. # runner.run(suite)
  178. # fp.close()