我正在尝试使用文档中提供的说明学习Appium:
http://appium.io/docs/en/about-appium/getting-started/?lang=en
我已将此代码放入名为AppiumTest.js
的文件中const wdio = require('webdriverio');
const opts = {
port: 4723,
desiredCapabilities: {
platformName: "Android",
platformVersion: "8.0",
deviceName: "Pixel_API_26",
app: "C:/Users/SStaple/AppData/Local/Android/Sdk/ApiDemos-debug.apk",
automationName: "UiAutomator2"
}
};
const client = wdio.remote(opts);
client
.init()
.click("~App")
.click("~Alert Dialogs")
.back()
.back()
.end();
我在启动Appium Server后使用命令:node AppiumTest.js从Node.js命令提示符运行它。还必须运行Android 8模拟器。
(Appium Server v1.7.1)
我在Appium Server窗口中获取输出。有很多错误。显示的第一个错误是:
Error "Command 'C\:\\Users\\SStaple\\AppData\\Local\\Android\\Sdk\\build-tools\\26.0.2\\aapt.exe d badging C\:\\Users\\SStaple\\AppData\\Local\\Programs\\appium-desktop\\resources\\app\\node_modules\\appium\\node_modules\\appium-uiautomator2-driver\\uiautomator2\\appium-uiautomator2-server-v0.1.8.apk' exited with code 1" while getting badging info
我尝试在命令提示符中单独运行此命令:
C:\Users\SStaple\AppData\Local\Android\Sdk\build-tools\26.0.2\aapt.exe d badging C:\Users\SStaple\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.1.8.apk
我得到的结果是:
W/zipro (13656): Error opening archive C:\Users\SStaple\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\node_modules\appium-uiautomator2-driver\uiautomator2\appium-uiautomator2-server-v0.1.8.apk: Invalid file
ERROR: dump failed because no AndroidManifest.xml found
有什么想法吗?
更新28/12/2017 - 我找到了解决方案!
有问题的文件看起来很可疑。它的大小是0Kb! 我从https://github.com/appium/appium-uiautomator2-server/releases下载了apk文件并使用了该文件。 这个是1,518 KB大小。 (显然在安装测试版时,npm没有将apk文件放到正确的位置有一些问题。)
解决了这个问题后,我可以继续讨论下一个问题!
答案 0 :(得分:0)
带有apk签名的known issue。
您可以从尝试更新依赖项开始:
npm install appium-uiautomator2-driver
npm install appium-adb
如果它没有帮助,你可以尝试更多(但这适用于Linux):
修改
./node-v6.11.4-linux-armv7l/lib/node_modules/appium/node_modules/appium-adb/build/lib/tools/apk-signing.js
所以即使看起来没有签名也会返回true。
case 20:
context$1$0.prev = 20;
context$1$0.t0 = context$1$0’catch’;
_loggerJs2[‘default’].debug(“App not signed with debug cert.”);
return context$1$0.abrupt(‘return’, true);