使用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
相关产品推荐
相关产品推荐

