准备JDK
python selenium 框架探索时介绍过,这里不做详细介绍
https://blog.youkuaiyun.com/weixin_44394054/article/details/103401889
准备SDK
链接:
链接:https://pan.baidu.com/s/1m-iS6Ih1gr-4P5yBckGg9A
提取码:2tw2
或者:http://tools.android-studio.org/index.php/sdk/
-
安装安卓版本
打开SDK Manager.exe
-
配置环境变量
ANDROID_HOME:G:\android-sdk-windows(安装位置)
在path路径中添加环境变量
%ANDROID_HOME%\tools
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\build-tools\27.0.3 -
验证是否配置SDK成功,在命令窗口中输入
adb –-version
准备NODE.JS
推荐下载11.15.0版本。与appnium适配。https://npm.taobao.org/mirrors/node/v0.11.15/x64/
下载地址:https://nodejs.org/en/
- 安装一路下一步。将安装路径配置到环境变量中
- 在命令窗口检查配置成功与否:node -v
准备APPNIUM
https://bitbucket.org/appium/appium.app/downloads/
链接:https://pan.baidu.com/s/12V1FqLweflnGBbx0GPI_BA 提取码:zp3e
命令窗口安装:
npm install –g appium
npm install –g appium-doctor
- 安装一路下一步。将安装路径下的node_modules.bin配置到环境变量中
- 在命令窗口检查配置成功与否:appium-doctor
准备安装appium-python-client
pip3 install Appium-Python-Client
调试设备
连接设备
adb devices
出现这种情况需要打开设备的USB调试模式,并授权。
连接端口
-
查看手机IP
设置->系统设置->关于手机->状态信息->IP地址或者通过 adb shell netcfg
-连接设备端口adb connect ip:5555
例如: adb connect 185.20.1.236:5555出现无法连接情况
1.ping IP 看是否能通
2.用adb tcpip模式重启adb : adb tcpip 5555
3.重新连接:adb connect ip:5555
启动appnium!
使用appium在android真机上测试程序时报错
command failed shell "ps ‘uiautomator’"的解决方式:
https://blog.youkuaiyun.com/pjl6523853/article/details/72886048
- 找到appium的安装目录下的adb.js文件
目录为:Appium\node_modules\appium\node_modules\appium-adb\lib - 打开adb.js,找到如下代码:
ADB.prototype.shell = function (cmd, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"';
} var execCmd = 'shell ' + cmd; this.exec(execCmd, cb); };
- 在这段代码下面加入这段代码:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"'; } var execCmd = 'shell ' + cmd + '| grep ' + grep; this.exec(execCmd, cb);
- 再找到如下代码:
ADB.prototype.getPIDsByName = function (name, cb) { logger.debug("Getting all processes with '" + name + "'"); this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
stdout = stdout.trim();
var procs = [];
var outlines = stdout.split("\n");
outlines.shift();
_.each(outlines, function (outline) {
if (outline.indexOf(name) !== -1) {
procs.push(outline);
}
});
if (procs.length < 1) {
logger.debug("No matching processes found");
return cb(null, []);
}
var pids = [];
_.each(procs, function (proc) {
var match = /[^\t ]+[\t ]+([0-9]+)/.exec(proc);
if (match) {
pids.push(parseInt(match[1], 10));
}
});
if (pids.length !== procs.length) {
var msg = "Could not extract PIDs from ps output. PIDS: " +
JSON.stringify(pids) + ", Procs: " + JSON.stringify(procs);
return cb(new Error(msg));
}
cb(null, pids); }); };
- 把这段代码注释掉,用如下代码代替:
ADB.prototype.getPIDsByName = function (name, cb) { logger.debug("Getting all processes with '" + name + "'"); this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
var pids = [];
_.each(procs, function (proc) {
var match = /[^\t ]+[\t ]+([0-9]+)/.exec(proc);
if (match) {
pids.push(parseInt(match[1], 10));
}
});
if (pids.length !== procs.length) {
var msg = "Could not extract PIDs from ps output. PIDS: " +
JSON.stringify(pids) + ", Procs: " + JSON.stringify(procs);
return cb(new Error(msg));
}
cb(null, pids); }); };
- 重启appium