如何检查Appium driver是否存活,确保仅在driver有效时执行截图操作
检查Driver存活的实现方案
你可以通过调用Selenium Driver的轻量交互方法,捕获会话失效异常的方式判断driver是否存活,该方式准确性最高,能覆盖远端Sauce Labs主动销毁会话的场景。
不同语言的实现代码如下:
Java 实现
import org.openqa.selenium.NoSuchSessionException; import org.openqa.selenium.SessionNotCreatedException; // 原有tearDown逻辑中替换截图部分的代码 try { // 调用无副作用的轻量交互方法校验会话状态 driver.getCurrentUrl(); takeAllureScreenShot(); } catch (NoSuchSessionException | SessionNotCreatedException e) { // 会话已失效,直接跳过截图 System.out.println("Driver会话已超时销毁,跳过截图操作"); }
如果你使用Selenium 4及以上版本,也可以先判断driver.getSessionId() != null作为前置校验,不过异常捕获的逻辑适配性更强,不需要依赖Selenium版本。
Python 实现
from selenium.common.exceptions import InvalidSessionIdException # tearDown中的截图逻辑替换为以下代码 try: # 校验会话有效性 _ = driver.current_url take_allure_screen_shot() except InvalidSessionIdException: print("Driver会话已失效,跳过截图")
额外优化建议
你也可以通过调整配置从根源避免这个问题:
- 给Sauce Labs的启动参数添加
idleTimeout配置,将闲置超时时间调整为大于3分钟(比如200秒),即可避免会话在数据持久化过程中被提前销毁 - 数据持久化校验建议通过接口轮询的方式实现,不要阻塞UI层的Driver会话,既可以避免超时问题,也能提升测试执行效率
内容的提问来源于stack exchange,提问作者sman
相关产品推荐
相关产品推荐

