Android Appium测试遇NoSuchSessionException:Thread.Sleep120秒触发异常
解决方案:Appium长时间无操作触发NoSuchSessionException
核心原因
长时间无操作时,Appium服务器或UiAutomator2驱动会因超时判定会话失效,主动终止连接。
具体解决办法
调整Appium服务器命令超时
启动Appium时设置更长的命令超时时间(建议大于120秒),同时开启会话覆盖:appium --session-override --command-timeout 300若通过代码启动服务,配置示例:
AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder(); serviceBuilder.withArgument(GeneralServerFlag.SESSION_OVERRIDE); serviceBuilder.withArgument(GeneralServerFlag.COMMAND_TIMEOUT, "300"); AppiumDriverLocalService service = serviceBuilder.build(); service.start();配置UiAutomator2驱动超时参数
在DesiredCapabilities中添加针对UiAutomator2的超时设置,避免驱动进程超时:DesiredCapabilities caps = new DesiredCapabilities(); // 其他基础配置(platformName、deviceName等)... caps.setCapability("uiautomator2ServerLaunchTimeout", 300000); // 300秒,单位毫秒 caps.setCapability("idleTimeout", 300); // 会话空闲超时,单位秒 caps.setCapability("uiautomator2ServerInstallTimeout", 300000); AndroidDriver driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), caps);替换Thread.sleep,保持会话活跃
不要完全无操作等待,每隔一段时间执行轻量无副作用操作维持会话,示例:long waitDuration = 120000; // 目标等待120秒 long checkInterval = 10000; // 每10秒执行一次轻量操作 long endTime = System.currentTimeMillis() + waitDuration; while (System.currentTimeMillis() < endTime) { // 执行如获取当前上下文的轻量操作 driver.getContext(); Thread.sleep(checkInterval); }检查设备休眠设置
确保测试设备的自动休眠时间大于120秒,或直接关闭自动休眠,避免设备休眠导致会话断开。
内容的提问来源于stack exchange,提问作者Filipe Alves
相关产品推荐
相关产品推荐

