appium安卓7.0以上报错:Original error: Command failed: ps: uiautomator
解决方法:步骤如下
1.找到appium的安装目录下的adb.js文件,目录为:Appium\node_modules\appium\node_modules\appium-adb\lib
2.打开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);};
3.找到如下代码:
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);});};
4.重启appium,问题解决