使用Selenium删除Mobile Safari上的Cookie
我正在为一个运行在iOS和Android上的web应用程序编写UI自动化。这些测试在远程电话设备上运行。到目前为止,使用相同URL的测试在Android上成功运行,但在iOS设备上失败 根本原因: 我有一个测试套件,套件中的每个测试都必须通过身份验证工作流并导航到测试页面。当我在iphonesafari上运行测试时,第一个测试执行得很好。当第二个测试开始时,初始测试URL直接登录到主页上(跳过身份验证部分,驱动程序仍在搜索用户名、密码字段),因为cookie已经存储在浏览器上 使用使用Selenium删除Mobile Safari上的Cookie,selenium,automation,appium,mobile-safari,appium-ios,Selenium,Automation,Appium,Mobile Safari,Appium Ios,我正在为一个运行在iOS和Android上的web应用程序编写UI自动化。这些测试在远程电话设备上运行。到目前为止,使用相同URL的测试在Android上成功运行,但在iOS设备上失败 根本原因: 我有一个测试套件,套件中的每个测试都必须通过身份验证工作流并导航到测试页面。当我在iphonesafari上运行测试时,第一个测试执行得很好。当第二个测试开始时,初始测试URL直接登录到主页上(跳过身份验证部分,驱动程序仍在搜索用户名、密码字段),因为cookie已经存储在浏览器上 使用driver.
driver.manage.deleteAllCookies()
没有帮助
有没有办法自动删除Safari浏览器中存储的cookie
附言:这个测试套件在Android平台上运行得非常好
技术细节:
我相信你可能无意中遇到了麻烦。我相信iOS驱动程序使用javascript获取cookie,这意味着它无法看到带有httponly或secure标志的cookie。要确认这一点,请登录您的应用程序,然后在iOS和Android上运行以下代码:
int clear = 0;
int secure = 0;
Set<Cookie> cookies = driver.manage().getCookies();
for (Cookie cookie : cookies) {
if(cookie.isSecure()) {
secure++;
} else {
clear++;
}
}
System.out.println("Found " + secure + " secure cookies");
System.out.println("Found " + clear + " clear cookies");
int clear=0;
int-secure=0;
设置cookies=driver.manage().getCookies();
用于(Cookie:cookies){
if(cookie.isSecure()){
安全++;
}否则{
clear++;
}
}
System.out.println(“找到”+安全+“安全cookie”);
System.out.println(“找到”+清除+“清除cookies”);
使用远程调试协议而不是javascript来处理Cookie,可能会修复Appium中的行为
解决方法可能需要在每次运行(慢速)时使用干净的模拟器,或者确保在开始测试之前完全注销。我也遇到过这种情况
driver.manage.deleteAllCookies()
此方法不适用于Real device(iPhone)Safari.:
我已经解决了这个问题:
- 导航到URL并检查它是否已登录李>
- 若用户已经登录,然后注销,它将重定向到主页,然后 使用新用户登录
- 如果用户未登录,则继续正常流量
祝你好运 为什么
使用driver.manage.deleteAllCookies()没有帮助?有错误吗?错误堆栈跟踪:我使用此方法作为临时解决方案。但在我的情况下,注销并不是一个永久的解决方案。谢谢你的解决方案,这很有效!!作为一个永久性的长期解决方案,我正在考虑的是,我需要确保cookie和缓存被清除,而无需在每个新的浏览器/测试阶段添加额外的注销步骤。我尝试过这一点,但它没有那么有效,因为selenium无法访问Safari浏览器的cookie jar。谢谢你的帮助