环境: windows7-64 python3.6.1 appium-desktop1.9.1 华为mate10
进入第二篇,我们要操作手机app自动化,第一步就是要能打开某个app。本篇选择腾讯的微信app作测试。
选择appium-desktop 是因为它是appium的图形界面版,内置Nodejs,安装过程不用任何配置,且支持android9.0
本篇使用到的环境安装,请看上篇。
跟着下面步骤:
手机USB连接电脑时,确保关闭360、或第三方手机助手软件。 有些手机品牌内置手机助手,如华为手机助手。首次插入USB,提示安装,安装即可。
手机插入后USB连接方式默认是仅充电。如果电脑开启了自动播放,会弹出后续操作选项。选择【打开设备以查看文件】就可以了。或者直接关闭自动播放功能,相关设置可以在【控制面板-硬件和声音-自动播放】设置,如图
手机USB连接方式,选择【传输文件】,会看到电脑右下角USB连接标志会出现加载驱动提示,待驱动加载完毕。手机与PC端的连接就成功了。可以在设备管理器里查看
现在我们在dos命令窗口,打命令 adb devices 看下会出现什么?
提示:doesn't math this client,could not read ok from adb server . cannot connect to daemon.
出现这个错误,是因为adb被占用了。
在USB插入前第三方手机助手都关闭了,难道是华为手机助手问题?
解决方法:退出华为手机助手,在任务管理器关闭所有adb进程,关闭360手机助手(由于360主动防护服务,即使关闭360安全卫士360的手机助手还是会启动,这个是报错主因)
再来adb devices
可以看到,adb 命令成功执行,但是还是没找到手机设备
解决方法:
手机打开USB调试。
【设置 - 系统 - 关于手机】在版本号处连续点击,待出现提示开启开发者模式后返回。然后进入开发人员选项。
开启USB调试, 由于手机正在USB连接,会弹出如下图所示提示,这里勾选始终,然后确定。
然后下拉屏幕,在【选择USB配置】处选择【MTP(多媒体传输)】
我们再来试试命令,adb devices (此处应重新打开DOS窗口)
至此 adb 连接测试手机成功。
手机通过USB连接PC,感觉好麻烦。有没简单的方法去解放数据线?
答案是有的。我们现在手机是通过USB连着电脑的,adb devices 也已成功显示手机设备。
可通过简单的命令,去实现有线转无线连接,前提是手机与PC处于同一个WIFI网络上,并已知道手机的局域网IP地址
首先设置一个容易记的adb连接端口号,并记下来 adb tcpip 5555
然后使用命令就可以连接上手机了 adb connect ip:5555
现在可以拔下USB数据线了。
注意:可能由于安卓版本问题,拔下数据线后,USB调试会自动关闭,这样WIFI连接就会处于offline,若出现这种状态,在手机开发者选项里找到 “仅充电”模式下开启adb调试并勾选上,再重新操作一遍。
adb连接可能会遇到各种各样的问题,无非两种方向
1、adb server 被占用,端口5037被占用。
2、 USB调试没打开,或打开后自动关闭,手机USB连接配置错误。
当然,也有可能会遇到adb版本不兼容问题,具体情况具体分析
打开,直接 start server 。这样就启动了以4723为服务端口的appium-server
如上图,点击这个按钮
在弹出界面中,主要是设置相关参数
如下图,是我的设置参数
{
"platformName": "Android",
"platformVersion": "9",
"deviceName": "192.168.1.100:5555",
"appPackage": "com.tencent.mm",
"appActivity": "com.tencent.mm.ui.LauncherUI",
"noReset": true,
"automationName": "Appium",
"newCommandTimeout": "240",
"unicodeKeyboard": true,
"resetKeyboard": true
}
具体参数函义,自已百度下更清楚,这里着重介绍有两点
1 noReset 需要设置为True,如果没设置,你的微信就相当于重新安装,首次调试时把我坑了。
2 platformversion 是手机的安卓版本,首次设置时我用 9.0 9.0.1 都是错误的,搞了很久才得到 9 这个正确值。
参数设置完后,就可以点击界面右下角的 【start session】
appium,会尝试连接你的手机,并在你手机上安装若干个app,若参数设置正确 稍等片刻后就会成功启动微信。
注意:start session 是会有很多问题出现的地方,在start 前要保证PC端与手机是处于正确的连接状态
用 adb devices 查看连接状态
至此,你已经成功了。没错配置成功了。最后一步就是用python写脚本了。
首先 pip 安装 Appium-Python-Client。 命令为 pip install Appium-Python-Client
打开python IDE, 这里是用 pycharm
新建项目-新建py文件。 导入appium模块, 相关源码,如图。
# coding=utf-8
from appium import webdriver
import time
def dc_option():
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '9'
desired_caps['deviceName'] = '192.168.1.100:5555'
desired_caps['newCommandTimeout'] = 240 #设置元素定位延时
desired_caps['noSign'] = True #避免重签名,未安装指定app 有用,已安装的没用
desired_caps['noReset'] = True #不重置app状态
desired_caps['unicodeKeyboard'] = 'True'
desired_caps['resetKeyboard'] = 'True'
desired_caps['automationName'] = 'Appium'
desired_caps['appPackage'] = 'com.tencent.mm'
desired_caps['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
return desired_caps
if __name__ == "__main__":
driver = webdriver.Remote('http://localhost:4723/wd/hub', dc_option())
time.sleep(10) # 暂停十秒后退出
#退出前 切换手机输入法为原生输入法
driver.activate_ime_engine(driver.available_ime_engines[0])
driver.quit()
为了sendkey 时能输入中文,手机是需要安装支持Unicode的输入法。脚本退出时恢复原生输入法。
在appium 【start session】成功后会出现UIView界面,那是用来进行手机元素定位的,手机操作跳转后,通过刷新来重新获取手机界面。得到元素后,就可以用python写具体的操作脚本了。
原以为很解决的描述,不知不觉写了很长很长。也忽略了一些无关的小细节。