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

求助:为何Appium无法在每次测试后关闭并重置应用?

解决WebDriverIO+Cucumber+Appium测试后应用未重置问题

问题背景

我使用JS(WebDriverIO + Cucumber)开发Appium项目,配置如下:

capabilities: [
        {
            platformName: 'Android',
            "appium:deviceName": "Pixel 2 API 30",
            "appium:fullReset": true,
            "appium:noReset": false,
            "appium:autoLaunch": true,
            "appium:automationName":"UIAutomator2",
            "appium:autoGrantPermissions": true,
            "appium:app": app_path
        }
]

尝试调整重置选项(切换Appium版本至1.22.3、修改noReset/fullReset参数)均无效,现象为:测试用例1执行成功后应用未自动关闭,测试用例2因应用停留在之前页面而失败,期望每次测试后Appium能清除、卸载并重新安装应用。

解决思路

  • 强制在Cucumber钩子中结束会话:Cucumber不会自动终止Appium会话,需在After钩子中手动调用driver.quit()或driver.deleteSession(),这是触发fullReset的前提(Appium仅在会话结束时执行重置逻辑)。示例代码:
    After(async function () {
      await driver.quit();
    });
    
  • 验证fullReset实际执行:查看Appium日志中是否存在Uninstalling app、Installing app的日志条目,确认重置逻辑是否触发;同时检查是否有其他配置(如命令行启动参数、wdio全局配置)覆盖了capabilities中的重置参数(fullReset与noReset互斥,需确保无冲突)。
  • 补充UIAutomator2重置参数:添加appium:dontStopAppOnReset: false确保测试后停止应用进程,若应用有附属包,可通过appium:uninstallOtherPackages指定需卸载的关联包名,示例:
    "appium:dontStopAppOnReset": false,
    "appium:uninstallOtherPackages": "com.your.app.package.debug,com.your.app.package.test"
    
  • 手动执行卸载逻辑:若自动重置仍失效,在After钩子中通过adb命令强制卸载应用,示例:
    After(async function () {
      await driver.executeScript('mobile: shell', {
        command: 'pm uninstall com.your.app.package'
      });
      await driver.quit();
    });
    
  • 检查Appium服务启动参数:确保启动Appium时未添加--no-reset等覆盖capabilities的参数,避免重置逻辑被跳过。

内容的提问来源于stack exchange,提问作者João Lucas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:55:17