背景:最近写了一篇博客是用 adb 远程连接手机(真机),联想到appium底层也是用的adb命令,那么可不可以将appium的代码通过远程调试手机,
而不用usb线调试呢?下面是我实验的过程。
1、先将appium的代码通过usb线连接形式,先调试一遍(为了让手机上安装一些必要的appium的apk,以及一些权限的开启)
import time
from appium import webdriver
# server 启动参数
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = '192.168.56.101:5555'
# app的信息
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
# 解决输入中文
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
desired_caps['noReset'] = True # 保留软件数据,否则每次一开始都要有一些权限问题,会报错的
# 声明我们的driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
2、查看appium的运行日志:
根据上图appium运行日志可以发现,有三个很重要的参数:5037、5555、以及手机ip地址。
在之前通过adb远程连接手机时,介绍过这几个端口的意义,直接上图:
这里再介绍一下:5037和5555端口作用
5037是adb client开启的端口,用来发送adb命令
adb server监听的就是5037端口,5555端口是用来与设备(pc)进行连接通信的。
所以,appium的远程通信,实质上就是adb的远程通信。
所以要想实现appium远程连接手机调控步骤:(前提,脚本先用usb进行有线连接跑一遍脚本,进行一些前置的准备:必要apk下载,权限问题)
1、开启appium server(将python代码转化为adb命令)
appium让一个脚本去跑到多台手机。
appium -p 4723 -bp 4724 -U 192.168.57.101:5555
appium -p 4725 -bp 4726 -U 192.168.57.102:5555
2、adb 设置为远程连接手机的形式
3、运行脚本,结果成功,可以通过远程连接的形式将appium脚本跑到手机上了。
踩坑:当我以客户端的形式启动appium时,是可以打开手机设置页面的,
但是当我以命令行形式启动server时,却打不开,并保错(查看appium日志看到报错信息:Error: Appium Settings app is not running after 5000ms),
解决方法:
该问题并不常见,主要是手机操作系统的问题
程序无法无法自动打开appium settings,那么我们可以手动打开appiumsettings服务(程序没有界面,会出现打开就闪退的错觉,这是正常现象)
然后再运行脚本。(我的原因是手机无法自动打开Appium Settings,通过手动打开即可正常运行)
如果觉得此方法麻烦,那就只能更新系统或者更换手机解决了。
但是当我以命令行形式启动server时,却打不开,并保错(查看appium日志看到报错信息:Error: Appium Settings app is not running after 5000ms),
解决方法:
该问题并不常见,主要是手机操作系统的问题
程序无法无法自动打开appium settings,那么我们可以手动打开appiumsettings服务(程序没有界面,会出现打开就闪退的错觉,这是正常现象)
然后再运行脚本。(我的原因是手机无法自动打开Appium Settings,通过手动打开即可正常运行)
如果觉得此方法麻烦,那就只能更新系统或者更换手机解决了。
教训:要学会看日志报错信息