Python Appium 开启Android测试之路
1、获取 Android app的Activity
打开终端cmd,先cd进入到刚才下载的“新浪.apk”目录下,然后使用aapt dump badging xxx.apk命令获取包内信息。注意,启动类名称一个字母都不能错。
罪过了,后面发现正常是没有appt.exe 这个应用程序的。可以下载一个放到tools文件下,因为已经配置了环境变量,所以 可以直接使用。
可以从下面拷贝一个到tools下即可。
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、元素定位

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()

resrouce-id属性是id:
driver.find_element_by_id('username')

3.2.3、通过name定位元素
text属性是name
driver.find_element_by_name('password')

#-*-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('') 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('') 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('') 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()
Python Appium 开启Android测试之路的更多相关文章
- Python +appium 封装desired_caps模块
使用python+appium做android的自动化测试时,首先需要启动appium服务,然后连接上手机,配置如下: desired_caps = {"platformName" ...
- Android ROM开发(三)——精简官方ROM并且内置ROOT权限,开启Romer之路
Android ROM开发(三)--精简官方ROM并且内置ROOT权限,开启Romer之路 相信ROM的相关信息大家通过前几篇的学习都是有所了解了,这里就不在一一提示了,这里我们下载一个官方包,我们还 ...
- Python+Appium自动化测试(15)-使用Android模拟器(详细)
做APP的UI自动化测试时,我们往往会使用真机跑自动化测试脚本,因为这样才是最真实的使用场景.但前期调试脚本的话,可以先使用模拟器,这样相对更加方便. 不推荐使用Android SDK里自带模拟器,太 ...
- Windows下部署Appium教程(Android App自动化测试框架搭建)
摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...
- 如何搭建基于C#和 Appium 的 Android自动测试环境
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使 ...
- Python appium搭建app自动化测试环境
appium做app自动化测试,环境搭建是比较麻烦的. 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎. 但没有成功的环境,就没有办法继续后续的使用. 在app自动化测试当中,我们主要是 ...
- python appium笔记(二):元素定位
#这里的示例是用android来说明的,xpath应该是通用的,resource-id不太清楚,没配过IOS的环境 #环境配置和一些参数的意思不清楚可以看我上一篇python appium笔记(一) ...
- Python+Appium环境搭建
1.python环境搭建,这里就不做过多介绍 2.安装 node.js 2.1.官网下载node.js:https://nodejs.org/en/download/ 2.2.获取到安装文件后,直接双 ...
- Appium 在 Android UI 测试中的应用
原文地址:https://blog.coding.net/blog/Appium-Android-UI Android 测试工具与 Appium 简介 Appium 是一个 C/S 架构的,支持 An ...
随机推荐
- 12: nginx原理及常用配置
1.1 nginx基本介绍 1.nginx高并发原理( 多进程+epoll实现高并发 ) 1. Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程. 2. 每个子进 ...
- UI自动化(一)html基础
前端的三把利器 HTML:赤裸的一个人 CSS:华丽的衣服 JS/JavaScript:赋予这个人的行为,也就是动起来 DOM 就是将页面变成可操 HTML(超文本标记语言) html代码实际上就是一 ...
- PO VO BO DTO POJO DAO之间的关系
J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了. PO:persistant ...
- Android.bp 添加宏开关【转】
本文转载自:https://github.com/zzb2760715357/document/blob/master/android_doc/Android.bp%E6%B7%BB%E5%8A%A0 ...
- php的__autoload和php的__call
首先, __call是php语言自身就具有的一种语言features...,不是thinkphp的语言特征. 关于__call参考: http://love-love-l.blog.163.com/b ...
- oracle函数之 minus
“minus”直接翻译为中文是“减”的意思,在Oracle中也是用来做减法操作的 Oracle的minus是按列进行比较的,所以A能够minus B的前提条件是结果集A和结果集B需要有相同的列数,且相 ...
- Css下拉菜单设置
<style type="text/css"> *{margin:0px;padding:0px;}设置所有标签属性<初始化页面属性> #nav{backg ...
- Java基础【基本数据类型包装类、int与String 之间的相互转换】
为什么会有基本类型包装类? 将基本类型数据类型封装成对象,这样的好处可以在对象中定义更多方法操作该数据. 包装类常用的操作就是用于基本数据类型与字符串之间的转换 问题:int a=100; 为什么不能 ...
- spring与mybatis四种整合方法
转载: 1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数. (1)Spring配置文件: <!-- 引 ...
- HDU 5985 Lucky Coins(概率)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5985 题意:有多种类型的硬币,每种类型的硬币都有一定的数量,现在每次抛硬币,除去朝下的硬币,知道最后 ...