失败[INSTALL_FAILED_ALREADY_EXISTS:尝试在不首先卸载的情况下重新安装io.appium.s



我正在尝试运行一个简单的脚本,它可以启动一个应用程序。这在我使用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。月食

到目前为止我尝试过的解决方案-

  1. 升级到最新版本的Appium-1.6.5(它不起作用,所以我降级到Appium 1.4.16.1

  2. 删除appium设置并从移动设备解锁文件夹。

  3. 删除了应用程序,然后重新启动appium服务器,并在之后再次运行脚本

我在门户网站上看到过类似的问题,但他们都只是进行了漫长的讨论,没有适当的解决方案。请帮我解决这个问题。感谢

这是安卓操作系统7.0版设备的已知问题

  1. Appium在初始化驱动程序时在设备上安装了两个应用程序(设置和解锁程序)(对于非7.0操作系统版本的设备,它可以正常工作)。

  2. 当你试图在同一台设备上再次初始化appium驱动程序时,appium无法安装这两个应用程序,也无法初始化驱动程序。

解决方案:对于Android OS 7.0,在启动应用程序服务器之前,您需要从设备上卸载解锁应用程序和设置应用程序。您可能在不同操作系统版本的设备上运行脚本,因此最好设置一个条件来卸载解锁程序和设置应用程序。

以下是步骤,但您可能需要根据自己的要求进行修改。

1.首先通过adb命令获取设备的操作系统版本,并将其存储在字符串中。

  1. 让我们考虑一下您已经将上述命令的输出存储在字符串变量中,然后您可以比较下面的值,并执行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.settingsadb -s device_serial uninstall io.appium.unlock

解决问题后,在运行自动化之前尝试卸载应用程序,并在终端中执行以下命令

adb uninstall io.appium.settings
adb uninstall io.appium.unlock

相关内容

最新更新