使用Selenium删除移动端Safari Cookie及iOS UI自动化测试故障排查
iOS Safari自动化测试第二个用例自动跳转的解决方案
嘿,我太懂这个坑了!这绝对是iOS Safari的会话缓存在搞事情——第一个测试用例走完认证流程后,浏览器把会话Cookie、本地存储这些数据牢牢存下来了,第二个用例启动时直接复用了这些缓存状态,根本没走初始URL的正常流程,直接跳去之前认证后的页面了,自然就失败了。
给你几个亲测有效的解决办法:
每个测试结束后彻底清理浏览器缓存
不管你用的是Appium、Playwright还是其他自动化框架,一定要在测试的收尾阶段(teardown)加清理操作:- 用Appium的话,可以执行JS代码清掉本地存储和Cookie:
另外还可以重置浏览器上下文,确保下一个测试从零开始。driver.executeScript("window.localStorage.clear();"); driver.deleteAllCookies(); - 用Playwright的话更简单,要么在每个测试后调用
context.clearCookies()和context.clearPermissions(),要么干脆给每个测试用例创建全新的浏览器上下文(browser.newContext()),完全隔离各个测试的环境。
- 用Appium的话,可以执行JS代码清掉本地存储和Cookie:
强制用无痕窗口跑每个测试
iOS Safari的无痕模式天生会隔离会话,不会保留任何缓存数据。你可以配置自动化框架,让每个测试都在无痕窗口启动:- Appium里把capabilities的
safari:usePrivateMode设为true; - Playwright创建上下文时加
{ incognito: true }参数就行。
- Appium里把capabilities的
确保测试用例的前置条件完全独立
别让第二个测试依赖第一个测试的状态!每个测试用例的前置步骤都要明确导航到登录页面,而不是直接跳目标页面,哪怕缓存里有认证信息,也强制触发一次完整的认证流程,从根源上避免跳转问题。
你可以手动验证一下:第一个测试跑完后,手动关闭Safari再打开,输入初始URL,如果也自动跳转,那百分百是缓存的锅,上面的方法肯定能解决。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

