Appium+python自动化-启动app
环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity。获取这两个关键东西的方法很多,这里就不一一多说,小伙伴们可以各显神通。小编这里主要给大家推荐一个sdk自带的实用工具aapt.
aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看apk包名和launcherActivity,当然还有更多的功能,有兴趣的可以查看相关资料。
1.在android-sdk里面双击SDK-manager,下载buidl-tools
2.勾选build-tools,随便选一个版本,我这里选的是24的版本
3.下载完成后,在D:\androidsdk\android-sdk-windows\build-tools\24.0.0目录下找到aapt.exe,将这个路径设置环境变量,添加到path下
4.打开cmd。输入aapt出现如下界面,说明环境OK了
1.将准备测试的APK放到D盘某个目录,如D:\test
2.打开cmd,输入指令aapt dump badging D:\test\xxx.apk(APK的全名,如手机淘宝.apk)
如果APK名字带有空格,则把路径用双引号括起来。
aapt d badging "d:\apktest\QQ 7.1.8.apk"
结果是
package: name='com.tencent.mobileqq' versionCode='718' versionName='7.1.8' platformBuildVersionName=''
install-location:'auto'
sdkVersion:'15'
targetSdkVersion:'9'
3.以手机淘宝.apk为例,如下图
4.这里就可以看到apk的包名:com.taobao.taobao
注:老司机可以直接把apk放在桌面上,输入指令后拖到cmd框
1.接着上一步操作,cmd屏幕拖到中间找到launcherActivity
2.这里可以看到,淘宝的launcherActivity值为com.taobao.tao.welcome.Welcome
QQ的launchable
launchable-activity: name='com.tencent.mobileqq.activity.SplashActivity' label='QQ'
1platformName:这里是android的apk
2.deviceName:手机设备名称,通过adb devices查看
3.platformVersion:android系统的版本号。见问题解答里的版本对应API。注意要与APPNIUM里的兼容性版本号保持一致。
4.appPackage:apk包名
5.appActivity:apk的launcherActivity
1.启动appium,右上角点三角形按钮,变成正方形,就是启动状态。
2.确认手机连上电脑
3.在pycharm运行脚本,随后在手机上会弹出安装下面两个软件的提示,安装后,桌面上多两个图标。那么恭喜你启动成功!
4.接着会看到淘宝app已经启动啦,有木有小激动~~
C:\.....>adb uninstall io.appium.unlock
返回Success
C:\.....>adb uninstall io.appium.settings
返回Success
Android SDK里的版本号获取,APPNIUM里的安卓设置版本号,还有脚本里的平台版本号,需要都保持一致。
# coding=utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': '30d4e606',
'platformVersion': '5.0',
# apk包名
'appPackage': 'com.taobao.taobao',
# apk的launcherActivity
'appActivity': 'com.taobao.tao.welcome.Welcome'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
这个地址是怎么来的呢?
这一篇主要学会使用aapt工具,然后启动app的一个流程,启动app后,下一步就是要定位元素了,定位元素android sdk里面用一个自带的uiautomatorviewer,appium里面也有一个Inspector,下篇会详细介绍。
QQ的启动,脚本如下
# coding=utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': 'C4Y5T16C08002942',
'platformVersion': '6.0',
# apk包名
'appPackage': 'com.tencent.mobileqq',
# apk的launcherActivity
'appActivity': 'com.tencent.mobileqq.activity.SplashActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
通过DOS命令,执行查看连接手机情况,出现如下异常
C:\Users\xu.lei>adb devices
List of devices attached
adb server version (31) doesn't match this client (39); killing...
error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
这个是socket 的端口被占用了,我这里是因为360手机助手占用了这个端口,所以其他的就不能够用了。
查看端口被谁占用的方法有两个
第1个方法是采用DOS命令,
netstat –nao
第2个方法是windows系统自带的"资源管理器"能查看端口使用情况,具体操作方法如下:
(1)如下图红色箭头标记,鼠标右键单击任务栏空白处,在弹出的右键菜单里选择"任务管理器":
(2)如下图红色圆圈标记,在"任务管理器"里,切换到"性能"选项卡,再点击"打开资源管理器":
(3)在"资源管理器"里,点击"网络",在"网络活动的进程"中勾选需要查询的进程,这时最下面一栏"侦听端口"就会显示这个进程(软件)所使用的端口了:
卸载了360的手机助手就可以了,
首先 打开360安全卫士,点击右下角的 "更多+"-》点击"我的工具"-》点击左下角的"编辑"-》点击"手机助手"上面的X号
这个时候可能会删除不了,那么就要删除手机助手的进程,如图里面的360Mobile。。这些,然后就可以删除了
然后再执行adb 命令就可以了
C:\>adb devices
查看设备的时候,显示 List of devices attached
解决方案:1.可以安装豌豆荚,它会自动安装手机驱动2.可以自己在网上找一个手机驱动,进行安装—这个是最直接的方法,华为手机就是装了驱动,才显示出来的。3.手机上打开开发者调试模式,可以打开设置—关于—版本号,点击5次,即可打开开发者模式。
2、
5.运行命令行
adb kill-server
adb devices
即可查看到设备
C:\Users\XXXi>adb devices
List of devices attached
C4Y5T16C08002942 device
Appium Appium 版本 1.4.16,Android 设备固件 7.x,执行脚本时,报错使用语言:python报错如下:
WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])
这个是因为appium版本1.4.16 使用的 uiatumator1.0不支持的原因导致?如果不升级appium版本,是否有解决方案?
uiautomator1.0应该是不支持7.0,不升版本就换用uiautomator2.0吧,或者用下面的改脚本的方法使用。
解决Android 7.0系统的手机无法执行appium脚本的问题,改问题的具体解决方法如下:
adb.js 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {
对应执行的指令是ps 'uiautomator', Android7不支持这个指令格式,所以执行结果是bad pid 'uiautomator'
目前Appium未对此进行处理,所以需要修改此指令的执行方式
即将
this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
替换成
this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
并增加上面用到的shell_grep函数:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"';
}
var execCmd = 'shell ' + cmd + '| grep ' + grep;
this.exec(execCmd, cb);
};
Android Platform Version与API Level的对应表
Platform Version |
API Level |
VERSION_CODE |
Notes |
Android 6.0 |
23 |
M |
Platform Highlights |
Android 5.1 |
22 |
LOLLIPOP_MR1 |
Platform Highlights |
Android 5.0 |
21 |
LOLLIPOP |
|
Android 4.4W |
20 |
KITKAT_WATCH |
KitKat for Wearables Only |
Android 4.4 |
19 |
KITKAT |
Platform Highlights |
Android 4.3 |
18 |
JELLY_BEAN_MR2 |
Platform Highlights |
Android 4.2, 4.2.2 |
17 |
JELLY_BEAN_MR1 |
Platform Highlights |
Android 4.1, 4.1.1 |
16 |
JELLY_BEAN |
Platform Highlights |
Android 4.0.3, 4.0.4 |
15 |
ICE_CREAM_SANDWICH_MR1 |
Platform Highlights |
Android 4.0, 4.0.1, 4.0.2 |
14 |
ICE_CREAM_SANDWICH |
|
Android 3.2 |
13 |
HONEYCOMB_MR2 |
|
Android 3.1.x |
12 |
HONEYCOMB_MR1 |
Platform Highlights |
Android 3.0.x |
11 |
HONEYCOMB |
Platform Highlights |
Android 2.3.4 |
10 |
GINGERBREAD_MR1 |
Platform Highlights |
Android 2.3.2 Android 2.3.1 |
9 |
GINGERBREAD |
|
Android 2.2.x |
8 |
FROYO |
Platform Highlights |
Android 2.1.x |
7 |
ECLAIR_MR1 |
Platform Highlights |
Android 2.0.1 |
6 |
ECLAIR_0_1 |
|
Android 2.0 |
5 |
ECLAIR |
|
Android 1.6 |
4 |
DONUT |
Platform Highlights |
Android 1.5 |
3 |
CUPCAKE |
Platform Highlights |
Android 1.1 |
2 |
BASE_1_1 |
|
Android 1.0 |
1 |
BASE |
|
我们在项目开发过程中,常常需要查看API Level和sdk版本,来进行一些方法的调用,有时候还需知道对应发布的时间,可以来了解我们最低兼容到的版本是什么时候发布的。
在这里贴出来方便以后查看:
Platform Version |
API Level |
VERSION_CODE |
Issue Date |
Android 1.0 |
1 |
发条机器人 |
2008-09 |
Android 1.1 |
2 |
Petit Four 花式小蛋糕 |
2009-02 |
Android 1.5 |
3 |
Cupcake 纸杯蛋糕 |
2009-04 |
Android 1.6 |
4 |
Donut 甜甜圈 |
2009-09 |
Android 2.0 |
5 |
Éclair 松饼 |
2009-10 |
Android 2.0.1 |
6 |
Éclair 松饼 |
2009-10 |
Android 2.1 |
7 |
Éclair 松饼 |
2009-10 |
Android 2.2-2.2.3 |
8 |
Froyo 冻酸奶 |
2010-05 |
Android 2.3-2.3.2 |
9 |
Gingerbread 姜饼 |
2010-12 |
Android 2.3.3-2.3.7 |
10 |
Gingerbread 姜饼 |
2010-12 |
Android 3.0 |
11 |
Honeycomb 蜂巢 |
2011-02 |
Android 3.1 |
12 |
Honeycomb 蜂巢 |
2011-02 |
Android 3.2 |
13 |
Honeycomb 蜂巢 |
2011-02 |
Android 4.0-4.0.2 |
14 |
Ice Cream Sandwich 冰激凌三明治 |
2011-10 |
Android 4.0.3-4.0.4 |
15 |
Ice Cream Sandwich 冰激凌三明治 |
2011-10 |
Android 4.1 |
16 |
Jelly Bean 糖豆 |
2012-07 |
Android 4.2 |
17 |
Jelly Bean 糖豆 |
2012-07 |
Android 4.3 |
18 |
Jelly Bean 糖豆 |
2012-07 |
Android 4.4 |
19 |
KitKat 奇巧巧克力棒 |
2013-10 |
Android 4.4W |
20 |
KitKat with wearable extensions 奇巧巧克力 |
2013-10 |
Android 5.0-5.0.2 |
21 |
Lollipop 棒棒糖 |
2014-11 |
Android 5.1 |
22 |
Lollipop 棒棒糖 |
2014-11 |
Android 6.0-6.1 |
23 |
Marshmallow 棉花糖 |
2015-10 |
Android 7.0 |
24 |
Nougat 牛轧糖 |
2016-08 |
Android 技术栈
作者:Jingbin_
链接:http://www.jianshu.com/p/0a3b972b85a0
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。