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 ...
随机推荐
- windows下常用的几个批处理脚本
1.windows下对比两个文件内容,有差异则执行一个任务: 适用场景:比如你的数据库备份结果的日志每天会形成一个文件,如下图,你可以通过此脚本检测到文件的变化,并执行发送告警邮件通知你数据库备份异常 ...
- Eclipse自动生成方法注释 快捷键
自动生成方法的注释格式,例如 /*** @param str* @return* @throws ParseException*/ 快捷键是 ALT + SHIFT + J,将光标放在方法名上,按快捷 ...
- topcoder srm 694 div1 -3
1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...
- Google Protocol Buffer在vs2010下配置
1.从这里下载protobuf-2.6.1.tar.gz到桌面,并解压,解压后的文件夹为protobuf-2.6.1.(我的桌面为C:\Users\mcl\Desktop) 2 .进入文件夹proto ...
- ODAC(V9.5.15) 学习笔记(七)TOraUpdateSQL
名称 类型 说明 DataSet 指向需要执行更新操作的数据集 DeleteObject 当执行删除操作时,通过该属性执行另外一个数据集,由后者来执行更多的删除动作 DeleteSQL TString ...
- 再谈 iptables 防火墙的 指令配置
手机上使用localhost为什么不能访问? 电脑上使用localhost 访问主页的原理是 电脑上有网站资源和服务器相关程序apache等的支持, 同时在 电脑的hosts文件中 有 127.0.0 ...
- 如何查看sonarqube的版本
Server Logs & System Info The System Info page is found at Administration > System. It gives ...
- oracle 之 创,增,删,改操作
--创建表 (包含其中的数据) create table TableName as select * from TableName --插入数据 insert into TableName(列,列.. ...
- LuoguP2257 YY的GCD
题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不会了,于 ...
- 题解——P1133 教主的花园DP
直接设二维状态具有后效性,会爆零 然后需要加一维 然后70 看了题解之后发现没有考虑1和n的关系 考虑之后,四十 然后懵逼 突然发现自己的ans更新写错了,导致每次ans都是第一个取30的情况的解 然 ...