You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Appium与WebDriverIO时Jasmine测试无法完成(挂起)

WebDriverIO Jasmine测试执行后长时间挂起问题排查与解决

问题现象

克隆WebDriverIO Boilerplate仓库并配置APK后,模拟器可正常启动应用,测试用例的控制台日志能正常打印、应用也能正确关闭,但测试进程会挂起近5分钟才结束。即使将测试简化为仅执行console.log("hello world")(Appium仍启动),该问题依旧存在。

使用版本:

  • node v19.9.0
  • appium-webdriver:1.0.2
  • webdriverio:8.1.3
  • ts-node:10.9.1
  • @wdio/jasmine-framework:8.1.3

排查与解决步骤

1. 修复测试代码中的语法错误

原测试代码存在语法问题:await const logo = await $('~logo'),await不能用于修饰变量声明,正确写法应为:

const logo = await $('~logo')

这类隐藏语法错误可能导致异步流程异常,使进程无法正常退出,修复后先验证是否解决问题。

2. 强制销毁Appium会话

测试结束后主动销毁会话,避免等待默认超时。在wdio.conf.js中添加afterTest钩子:

afterTest: async function() {
    await driver.deleteSession();
}

同时检查配置中是否存在noReset: true,若不需要保留应用状态,改为noReset: false,减少Appium清理资源的耗时。

3. 切换Node.js至LTS版本

Node.js v19为非长期支持版本,WebDriverIO v8对LTS版本(如v18.x、v20.x)兼容性更稳定。降级至Node.js v18.x LTS后,重新执行npm install安装依赖,再进行测试。

4. 调整WebDriverIO超时配置

修改wdio.conf.js中的超时参数,避免不必要的重试等待:

exports.config = {
    // ...其他配置
    connectionRetryTimeout: 10000,
    connectionRetryCount: 2,
    // ...
}

5. 排查全局钩子的异步阻塞

检查beforeAll、afterAll等全局钩子中是否存在未正确处理的异步操作(比如未完成的Promise请求)。暂时移除自定义钩子,使用默认配置测试,确认是否是钩子导致进程无法退出。

内容的提问来源于stack exchange,提问作者William Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:33:23