使用Selenium删除Mobile Safari上的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.

我正在为一个运行在iOS和Android上的web应用程序编写UI自动化。这些测试在远程电话设备上运行。到目前为止,使用相同URL的测试在Android上成功运行,但在iOS设备上失败

根本原因: 我有一个测试套件,套件中的每个测试都必须通过身份验证工作流并导航到测试页面。当我在iphonesafari上运行测试时,第一个测试执行得很好。当第二个测试开始时,初始测试URL直接登录到主页上(跳过身份验证部分,驱动程序仍在搜索用户名、密码字段),因为cookie已经存储在浏览器上

使用
driver.manage.deleteAllCookies()
没有帮助

有没有办法自动删除Safari浏览器中存储的cookie

附言:这个测试套件在Android平台上运行得非常好

技术细节:

  • 测试框架-Selenium

  • 移动自动化框架-Appium

  • 设备:iPhone-版本11(在云上设置内部工具以执行测试套件)

  • 浏览器:Safari


  • 我相信你可能无意中遇到了麻烦。我相信iOS驱动程序使用javascript获取cookie,这意味着它无法看到带有httponlysecure标志的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。谢谢你的帮助