如何在Appium测试中使用已有的App Session?
如何在Appium中续接已有的App会话
当然有办法实现Appium会话续接!下面我会分两种常见场景给你详细说明,都是实际项目里常用的方案:
一、通过Capabilities配置保持会话状态(避免重置)
如果你希望每次启动测试时复用之前的应用会话状态(比如保留登录信息、缓存数据),可以通过设置以下Capabilities来实现:
noReset: true:这是核心参数,它会让Appium在测试结束后不重置应用的状态(包括用户数据、偏好设置等),下次启动测试时直接复用当前的应用上下文。fullReset: false:这个是默认值,但明确设置可以确保不会执行完全重置操作,和noReset配合使用更稳妥。dontStopAppOnReset: true(仅iOS):额外设置这个参数后,Appium在测试结束后不会停止应用进程,下次启动时直接唤醒已运行的应用实例,进一步提升续接效率。
二、主动续接已运行的Session ID
如果已经有一个正在运行的Appium会话,你可以通过保存的sessionId直接重新连接到该会话,步骤如下:
- 首次启动会话时,获取并保存会话ID:
// Java示例 String sessionId = driver.getSessionId().toString(); // 可以把sessionId存在文件或内存中,方便后续使用# Python示例 session_id = driver.session_id - 需要续接时,使用客户端API连接到已有会话:
// Java示例 DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("platformName", "Android"); // 匹配原会话的平台 AppiumDriver driver = new AppiumDriver(new URL("http://localhost:4723/wd/hub"), caps); driver.setSessionId(sessionId); // 传入保存的会话ID // 现在可以继续使用driver执行操作了# Python示例 from appium import webdriver caps = {"platformName": "Android"} # 匹配原会话的平台配置 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) driver.session_id = session_id # 替换为保存的会话ID
注意事项
- 续接会话的前提是原会话仍在运行:Appium服务不能重启,原会话也没有被手动终止或超时关闭。
- 客户端与服务端的Appium版本尽量保持一致,避免因版本兼容问题导致续接失败。
- 如果使用云测试平台,部分平台支持会话续接功能,但需要遵循平台特定的配置规则。
内容的提问来源于stack exchange,提问作者NarendraR
相关产品推荐
相关产品推荐

