使用Selenium删除Mobile Safari上的Cookie

时间:2018-04-19 18:07:29

标签: selenium automation appium mobile-safari appium-ios

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

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

使用driver.manage.deleteAllCookies()无济于事。

有什么办法可以自动删除存储在Safari浏览器中的cookie吗?

P.S:测试套件适用于Android平台。

技术细节:

  1. 测试框架 - Selenium

  2. 移动自动化框架 - Appium

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

  4. 浏览器:Safari

2 个答案:

答案 0 :(得分:0)

我相信你可能偶然发现bug in appium for iOS。我相信iOS驱动程序使用javascript获取cookie,这意味着它无法看到带有 httponly 安全标志的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");

可以使用远程调试协议而不是javascript来修复Appium中的行为以使用cookie。

解决方法可能需要在每次运行时使用干净的模拟器(慢)或确保在开始测试之前完全注销。

答案 1 :(得分:0)

我也遇到过这种issue driver.manage.deleteAllCookies()此方法不适用于Real device(iPhone)Safari。 for Referencehttps://github.com/appium/appium/issues/10568

我已解决此问题:

  • 之后导航至URL,并检查其是否已登录。
  • 如果用户已经登录然后注销,它将重定向到主页,然后 用新用户登录。
  • 如果用户未登录,则继续正常操作。

使用此流程,您可以解决问题。

希望这会对您有所帮助。

祝你好运!!!!