appium支持android7.0
运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.]
selenium.common.exceptions.SessionNotCreatedException: Message: A new session could not be created. (Original error: Command failed: C:\WINDOWS\system32\cmd.exe /s /c ""D:\Program Files\android-sdk-windows\platform-tools\adb.exe" -s 893dac07 shell "ps 'uiautomator'""
原因分析:appium的uiautomator版本与androidV7.0不适配。
预置条件:手机端已经安装完Appium Settings 和 Unlock两个应用
解决步骤:1.修改源码文件-注释安装appiumSettings和unlock的两行代码
位置:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android\android.js
//this.initUnicode.bind(this),
//this.pushSettingsApp.bind(this),
//this.pushUnlock.bind(this),
//this.unlock.bind(this),
2.在代码
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); };
3.修改源码文件如下:
a.打开 \Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js
b.在adb.js的1035行找到
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, []);
}
3.修改代码,之后重启appium
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); this.shell_grep("ps", name, function (err, stdout) { if (err) { logger.debug("No matching processes found"); return cb(null, []); } //stdout = stdout.trim(); //var procs = []; //var outlines = stdout.split("\n"); //_.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); }); };