Python Appium开启Android测试之路

发表于:2017-12-06 11:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Blue·Sky    来源:博客园

  1、获取 Android app的Activity
  打开终端cmd,先cd进入到刚才下载的“新浪.apk”目录下,然后使用aapt dump badging xxx.apk命令获取包内信息。注意,启动类名称一个字母都不能错。
  aapt dump badging 新浪.apk cat>d:/log.txt  这样可以将信息指定到某一文件下然后 查看
  2、启动微博
#-*-coding:utf-8-*-
#Time:2017/7/20 18:06
#Author:YangYangJun
import time
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = 'N79SIV5PVCSODAQC'
desired_caps['appPackage'] = 'com.sina.weibo'
desired_caps['appActivity'] = 'com.sina.weibo.SplashActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
time.sleep(3)
driver.quit()
  3、元素定位
  3.1、appium的webdriver提供了11种元素定位的方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来
  多的三个:
  driver.find_element_by_accessibility_id()
  driver.find_element_by_android_uiautomator()
  driver.find_element_by_ios_uiautomation()
  (第三个是ios的专用的)
  3.2、下面一一举例进行 介绍
  3.2.1、元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.
  uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。
  启动uiautomatorviewer.bat
  打开目录D:\SProgram\Sdk\tools
  双击启动,启动之后出现如下界面
  如果不喜欢双击启动的话,也可以在cmd里面通过指令启动
  先cd到tools目录下,然后输入uiautomatorviewer.bat回车后启动服务
  3.2.1、find_element_by_accessibility_id
  driver.find_element_by_accessibility_id(u"我的").click()
  3.2.2、通过id定位元素
  resrouce-id属性是id:
  driver.find_element_by_id('username')
  3.2.3、通过name定位元素
  text属性是name
  driver.find_element_by_name('password')
  4、结合公司刚开发出来的app,进行项目实训
#-*-coding:utf-8-*-
#Time:2017/7/21 16:32
#Author:YangYangJun
import time
import unittest
from appium import webdriver
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class Login(unittest.TestCase):
def setUp(self):
self.desired_caps = {}
self.desired_caps['platformName'] = 'Android'
self.desired_caps['platformVersion'] = '6.0'
self.desired_caps['deviceName'] = 'N79SIV5PVCSODAQC'
self.desired_caps['appPackage'] = 'com.xxxx.mrg'
self.desired_caps['appActivity'] = 'com.uzmap.pkg.EntranceActivity'
#隐藏键盘
self.desired_caps['unicodeKeyboard'] = True
self.desired_caps['resetKeyboard'] = True
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
#self.driver.implicitly_wait(15)
#测试异常登录-用户不存在
def test_aNoUserLogin(self):
driver  = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click()
time.sleep(5)
driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer1')
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('111111')
time.sleep(2)
driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(18)
get_alertMessage = driver.find_elements_by_android_uiautomator('new Uiselector().resourceId("android:id/message")').get_attribute('name')
time.sleep(2)
if get_alertMessage == u'用户不存在':
print u"用户不存在,用例执行成功!"
else:
print u"用例执行失败!"
def test_bNoPassLogin(self):
driver  = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click()
time.sleep(5)
driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('1111112')
time.sleep(2)
driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(18)
get_alertMessage = driver.find_elements_by_android_uiautomator('new Uiselector().resourceId("android:id/message")').get_attribute('name')
time.sleep(2)
print get_alertMessage[0:5]
# if get_alertMessage == u'用户不存在':
#     print u"用户不存在,用例执行成功!"
# else:
#     print u"用例执行失败!"
#
# 测试正常登录
def test_cLogin(self):
driver = self.driver
time.sleep(5)
driver.find_element_by_accessibility_id(u"我的").click()
time.sleep(5)
driver.find_element_by_accessibility_id(u"登录/注册").click()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("username")').send_keys('xzbuyer')
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').clear()
time.sleep(2)
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("password")').send_keys('111111')
time.sleep(2)
driver.find_element_by_accessibility_id(u"登录").click()
time.sleep(2)
# 判断是否登录成功
print driver.find_element_by_accessibility_id(u"西藏医药销售有限公司").get_attribute('name')
nickName = driver.find_element_by_accessibility_id(u"西藏医药销售有限公司").get_attribute('name')
temp = nickName[0:2]
print  temp
if nickName == u'西藏医药销售有限公司':
print '登录成功!'
else:
print '登录失败!'
def tearDown(self):
self.driver.close_app()
self.driver.quit()
if __name__ == "__main__":
unittest.main()

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号