打牌拯救世界 2026-02-26 14:31 采纳率: 0%
浏览 5

appium启动时安装Uiautomator2相关的apk时如果手机有安装弹窗会导致appium卡死

最近在springboot中启动appium时,如果手机是第一次使用,那么appium会自动安装uiautomator2相关的两个apk到手机上:
appium-uiautomator2-server-debug-androidTest.apk和appium-uiautomator2-server-v7.5.2.apk,但是可能由于手机自身的问题,每次安装都会弹出安装的弹框,需要点击安装才行,然后这两个apk应该是同时进行安装的,两个弹框一起出来,导致第一个被顶掉了,然后第一个就一直处于未安装状态,appium也不继续运行了。

手机已打开开发者模式,支持usb安装应用,且安装权限什么的都打开了,安装风险中心也关闭了。
以下是关键部分appium日志:

img

然后手机弹出安装appium-uiautomator2-server-debug-androidTest.apk的框,点击安装之后,打印了
2026-02-26 12:17:39:032 - [0fc6647c][ADB] Install command stdout: Success
之后就没有反应了,一直等待直到超时。
没有安装弹窗的话没有这个问题。
目前解决办法:手动把两个apk安装上去,然后启动appium就没问题。
但是不够“自动化”。请问有没有更好的解决方案?

  • 写回答

2条回答 默认 最新

  • 极客车云 2026-02-27 00:34
    关注

    问题分析

    当Appium在启动时安装Uiautomator2相关apk遇到手机安装弹窗导致卡死的情况,我们可以从以下几个方面来解决:

    解决方案步骤

    1. 自动处理安装弹窗(以Android为例)

    可以通过在Appium的Desired Capabilities中添加相关配置来尝试自动处理安装弹窗。

    首先,在Java中使用Appium的相关API来设置Desired Capabilities,示例代码如下:

    import io.appium.java_client.remote.MobileCapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class AppiumExample {
        public static void main(String[] args) throws MalformedURLException {
            DesiredCapabilities caps = new DesiredCapabilities();
            caps.setCapability(MobileCapabilityType.DEVICE_NAME, "your_device_name");
            caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
            // 添加自动接受权限的配置(针对安装弹窗等权限相关情况)
            caps.setCapability("autoGrantPermissions", true);
            // 其他必要的配置...
            URL appiumServerUrl = new URL("http://127.0.0.1:4723/wd/hub");
            // 这里可以使用AppiumDriver来初始化会话等操作
            // AndroidDriver<MobileElement> driver = new AndroidDriver<>(appiumServerUrl, caps);
        }
    }
    

    在上述代码中,autoGrantPermissions这个配置项可以尝试自动授予相关权限,包括安装应用时可能出现的权限请求弹窗。如果是针对安装应用的弹窗,有些情况下也可以考虑使用dontStopAppOnReset等配置配合其他方式,但具体还需要根据实际情况调整。

    2. 检查Appium和相关依赖版本

    确保Appium的版本以及其依赖的uiautomator2相关组件版本是兼容且稳定的。可以尝试升级Appium到最新稳定版本,同时检查uiautomator2的版本是否合适。例如,通过pip install -U appium-python-client(如果是Python环境)来升级Appium的Python客户端,或者通过Appium的官方渠道来更新Appium本身。

    3. 手动预安装相关apk

    如果自动处理安装弹窗的方式不可行,可以考虑手动将Uiautomator2相关的apk预安装到手机上。

    • 首先找到Appium中uiautomator2相关apk的路径。一般来说,在Python环境下,Appium的uiautomator2驱动相关的apk会存储在Python环境的库目录下,例如在site-packages/appium/webdriver/remote/webdriver.py等相关文件中可能会有路径相关的配置,或者可以通过搜索本地文件系统找到appium-uiautomator2-server.apkappium-uiautomator2-server-debug-androidTest.apk这两个文件。
    • 然后通过Android的adb命令来手动安装这两个apk到手机上,命令如下:
      adb install appium-uiautomator2-server.apk
      adb install appium-uiautomator2-server-debug-androidTest.apk
      
      需要注意的是,要确保手机已经开启了USB调试模式,并且通过adb能够正常连接到手机。

    4. 异常处理和日志监控

    在Spring Boot应用中启动Appium相关操作时,要添加完善的异常处理机制,并开启详细的日志监控。例如,在Java中可以使用try-catch块来捕获Appium启动过程中可能出现的异常,并在日志中记录详细信息,以便于排查因为安装弹窗导致卡死的具体原因。示例代码如下:

    import io.appium.java_client.android.AndroidDriver;
    import io.appium.java_client.remote.MobileCapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class AppiumBootstrap {
        private static final Logger logger = LoggerFactory.getLogger(AppiumBootstrap.class);
        public static void main(String[] args) {
            DesiredCapabilities caps = new DesiredCapabilities();
            caps.setCapability(MobileCapabilityType.DEVICE_NAME, "your_device_name");
            caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
            try {
                URL appiumServerUrl = new URL("http://127.0.0.1:4723/wd/hub");
                AndroidDriver driver = new AndroidDriver<>(appiumServerUrl, caps);
                // 后续的操作...
            } catch (MalformedURLException e) {
                logger.error("Appium server URL is malformed", e);
            } catch (Exception e) {
                logger.error("An error occurred during Appium initialization", e);
            }
        }
    }
    

    通过这样的日志监控,可以在Appium卡死时,根据日志信息快速定位到问题所在,进而采取相应的解决措施。

    综上所述,通过以上几个方面的操作,可以尝试解决Appium启动时安装Uiautomator2相关apk遇到手机安装弹窗导致卡死的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月26日