我正在尝试运行一个简单的脚本,它可以启动一个应用程序。这在我使用Android 6.0时运行良好,但在Android 7.0 上失败
这是脚本-
DesiredCapabilities capabilities= new DesiredCapabilities();
capabilities.setCapability("deviceName","Moto G4 Plus");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("platformVersion","7.0.");
capabilities.setCapability("appPackage","com.bigbasket.mobileapp");
capabilities.setCapability("appActivity","com.bigbasket.mobileapp.activity.HomeActivity");
AndroidDriver driver= new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
Thread.sleep(4000);
这是错误日志-
错误:启动Appium会话失败,错误为:错误:命令失败:C:\WINDOWS\system32\cmd.exe/s/C"C:\Users\gadiisha\AppData\Local\Android\Android-sdk\platform tools\adb.exe-s ZY2237WRTC install"D:\Appium\node_modules\apium\build\settings_apk\settings.apk-debug.apk"未能安装D:\Apium\node_modules\apium\build\settings_apk\settings-apk-debug.apk:失败[install_Failed_ALREADY_EXISTS:尝试在未首先卸载的情况下重新安装io.Appium.settings。]
info:[debug]错误:命令失败:C:\WINDOWS\system32\cmd.exe/s/C"C:\Users\gadiisha\AppData\Local\Android\Android-sdk\platform tools\adb.exe-s ZY2237WRTC install"D:\Appium\node_modules\Appium\build\settings_apk\settings-apk-debug.apk"未能安装D:\Apium\node_modules\apium\build\settings_apk\settings-apk-debug.apk:失败[install_Failed_ALREADY_EXISTS:尝试在未首先卸载的情况下重新安装io.Appium.settings。]
at ChildProcess.exithandler (child_process.js:751:12) at ChildProcess.emit (events.js:110:17) at maybeClose (child_process.js:1016:16) at Process.ChildProcess._handle.onexit (child_process.js:1088:5)
info:[debug]响应客户端时出现错误:{"status":33,"value":{"message":"无法创建新会话。(原始错误:命令失败:C:\WINDOWS\system32\cmd.exe/s/C\"C:\Users\gadiisha\AppData\Local\Android\Android-sdk\platform-tools\adb.exe-s ZY2237WRTC install\"D:\Appium\node_modules\Appium\build\settings_apk\settings-apk-debug.apk\"\"\n未能安装D:\Apium\node_modules\apium\build\settings_apk\settings-apk-debug.apk:失败[install_FAILED_ALREADY_EXISTS:尝试在不首先卸载的情况下重新安装io.Appium.settings。]\r\n)","killed":false,"code":1,"signal":null,"cmd":"C:\WINDOWS\system32\cmd.exe/s/C\"C:\Users\gadiisha\AppData\Local\Android\Android-sdk\platform-tools\adb.exe-s ZY2237WRTC install\"D:\Appium\node_modules\apium\build\settings_apk\settings-apk-debug.apk\"\","origValue":"命令失败:C:\WINDOWS\system32\cmd.exe/s/C\"C:\Users\gadiisha\AppData\Local\Android\Android-sdk\platform-tools\adb.exe-s ZY2237WRTC install\"D:\Appium\node_modules\Appium\build\settings_apk\settings.apk-debug.apk\"\"安装D:\Appium \node_modeles\Appium\bbuild\settings_apk\setting_apk-debug失败[INSTALL_FAILED_ALREADY_EXISTS:尝试在不首先卸载的情况下重新安装io.appium.settings。]\r\n"},"sessionId":null}信息:<--POST/wd/hub/session 500 10506.783 ms-1306
详细信息-1.窗户的Appium 2。appium版本1.4.16.1 3。月食
到目前为止我尝试过的解决方案-
升级到最新版本的Appium-1.6.5(它不起作用,所以我降级到Appium 1.4.16.1
删除appium设置并从移动设备解锁文件夹。
删除了应用程序,然后重新启动appium服务器,并在之后再次运行脚本
我在门户网站上看到过类似的问题,但他们都只是进行了漫长的讨论,没有适当的解决方案。请帮我解决这个问题。感谢
这是安卓操作系统7.0版设备的已知问题
-
Appium在初始化驱动程序时在设备上安装了两个应用程序(设置和解锁程序)(对于非7.0操作系统版本的设备,它可以正常工作)。
-
当你试图在同一台设备上再次初始化appium驱动程序时,appium无法安装这两个应用程序,也无法初始化驱动程序。
解决方案:对于Android OS 7.0,在启动应用程序服务器之前,您需要从设备上卸载解锁应用程序和设置应用程序。您可能在不同操作系统版本的设备上运行脚本,因此最好设置一个条件来卸载解锁程序和设置应用程序。
以下是步骤,但您可能需要根据自己的要求进行修改。
1.首先通过adb命令获取设备的操作系统版本,并将其存储在字符串中。
- 让我们考虑一下您已经将上述命令的输出存储在字符串变量中,然后您可以比较下面的值,并执行adb命令来卸载两个应用程序,并且您的appium驱动程序应该在没有任何问题的情况下进行初始化
下面是上述两个步骤的组合代码片段:
String cmd = "adb shell getprop ro.build.version.release";
String osVersion=executeCommand(cmd);
if(osVersion.contains("7"))
{
//uninstall io.appium.settings
cmd="adb uninstall io.appium.settings";
executeCommand(cmd);
//uninstall io.appium.unlock
cmd="adb uninstall io.appium.unlock";
executeCommand(cmd);
}
public String executeCommand(String cmd)
{
String commandresponse="";
try
{
Runtime run = Runtime.getRuntime();
Process proc=run.exec(cmd);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
String response=null;
while ((response = stdInput.readLine()) != null)
{
if(response.length()>0)
{
commandresponse=commandresponse+response;
}
}
while ((response = stdError.readLine()) != null)
{
commandresponse=commandresponse+response;
}
}
catch(Exception e)
{
e.printStackTrace();
}
//System.out.println(commandresponse);
return commandresponse;
}
注意:编写上述代码片段时,考虑到只有一个设备连接到机器,因此所有adb命令都只能发送到该设备。如果您已将多个设备连接到机器,则可以断开未使用的设备,也可以在代码中的上述adb命令中添加deviceSerialNumber参数。
希望这有帮助:)
在运行脚本之前运行adb -s device_serial uninstall io.appium.settings
和adb -s device_serial uninstall io.appium.unlock
。
解决问题后,在运行自动化之前尝试卸载应用程序,并在终端中执行以下命令
adb uninstall io.appium.settings
adb uninstall io.appium.unlock