【问题标题】:Clear cookies per each test in PhantomJS+GhostDriver+WebDriver client configuration在 PhantomJS+GhostDriver+WebDriver 客户端配置中为每个测试清除 cookie
【发布时间】:2013-09-25 14:59:19
【问题描述】:

如何清除 PhantomJS + GhostDriver + Selenium WebDriver + WebDriver 客户端系统中每个测试的 cookie?

我的测试过程是这样的:

  1. 以集线器角色启动 selenium-web-driver-standalone。
  2. 以 webdriver 模式启动 phantomjs 并将其附加到 selenium 网络驱动程序。
  3. 启动迭代测试套件并启动每个测试套件的 shell 脚本。
  4. 每次测试都使用webdriver客户端并与浏览器通信 连接到 selenium 网络驱动程序。

当我使用 firefox 浏览器而不是 phantomjs 时,所有测试都通过了。但是当我切换到使用 phantomjs 作为浏览器时,所有检查注册的测试都失败了,因为在第一次测试执行后已经设置了 cookie。我可以在每次测试启动时清除所有 cookie 吗?或者我应该在每个单独的测试中重新启动 phantomjs 进程(因为这是在非集线器角色中使用 firefox 和 selenium webdriver)?

【问题讨论】:

    标签: cookies selenium-webdriver automated-tests phantomjs


    【解决方案1】:

    可能有些题外话,导致作者标明他使用php运行测试。

    但是,如果您来自 google,并且对清除所有 cookie 的 C# 解决方案感兴趣,请查看以下内容:

    // driver is fully initialized PhantomJS instance
    driver.Manage().Cookies.DeleteAllCookies();
    

    需要 NuGetPackages:

    PhantomJS 2.0.0

    Selenium.Support 2.48.2

    Selenium.WebDriver 2.48.2

    使用 .NETFramework v4.5.2 测试

    【讨论】:

      【解决方案2】:

      您可以使用以下方法删除特定 cookie:

      webDriver.manage().deleteCookieNamed("smSession");
      

      并使用以下方法删除所有 cookie:

      webDriver.manage().deleteAllCookies();
      

      【讨论】:

      • 来自哪个地方?我的测试是在 PHP 上编写的,使用客户端库与 phantomjs 进行通信。
      • 你从哪里得到 selenium Webdriver。它应该可以从您的测试中访问,或者以某种方式与其他包装,比如说 - “代理”WebDriver 类。最终,Webdriver 对象应该可以通过某种方式访问​​。
      • 我试过这样做,但没有任何结果。看起来像虚拟方法调用。
      • 如果您执行 webDriver.manage().getAllCookies() 之类的操作,您是否会收到有问题的 cookie?可以通过 webDriver.manage().getCookie("cookieName") 之类的方式获取特定的 cookie?
      【解决方案3】:

      我遇到了 GhostDriver 无法清除 localStorage 的类似问题。试试这些建议:

      在你的 driver.get(URL) 到你的页面后,你可以在 它来自 webdriver,像这样

      function clearCookie(name, domain, path){
          var domain = domain || document.domain;
          var path = path || "/";
          document.cookie = name + "=; expires=" + +new Date + "; domain=" + domain + "; path=" + path;
      };
      

      没有 100% 的解决方案可以删除浏览器 cookie。

      问题在于,cookie 的唯一标识不仅仅是由 他们的关键“名称”,还有他们的“域”和“路径”。

      在不知道 cookie 的“域”和“路径”的情况下,您无法 可靠地删除它。此信息无法通过 JavaScript 的 document.cookie。它不能通过 HTTP 获得 Cookie 标头也可以!

      但是,如果您知道 cookie 的名称、路径和域,那么您 可以通过在 过去

      资源:

      1. https://sqa.stackexchange.com/a/10468
      2. https://stackoverflow.com/a/2421786/572348

      【讨论】:

      • 嗯,cookie 呢?
      • @Ostrovski 哦,对不起。也许你应该执行这个脚本? stackoverflow.com/a/2421786/572348
      • 我的意思是,您的脚本会清除 localStorage,但不会清除 cookie。
      • 好吧,现在答案看起来与问题有关。不幸的是,目前我没有能力检查这个解决方案。此外,声称无法通过 HTTP Cookie 标头获取有关 cookie 域和路径的信息看起来不正确。
      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多