【问题标题】:How to set a cookie in Geb / Selenium with PhamtomJS如何使用 PhantomJS 在 Geb / Selenium 中设置 cookie
【发布时间】:2017-07-16 10:33:17
【问题描述】:

如何在 Geb 中设置 cookie?我在给定的示例中遇到了以下错误:

org.openqa.selenium.InvalidCookieDomainException: {"errorMessage":"Can only set Cookies for the current domain" ....

.. 我还尝试使用 Cookie Builder 显式设置 cookie 多米诺骨牌,但这只会导致另一个异常:org.openqa.selenium.UnableToSetCookieException: {"errorMessage":"Unable to set Cookie"}

请注意,我曾经在 GebConfig.groovy 文件中有一个 baseURL .. 但我也将其删除了.. 除了 PhantomJS 驱动程序配置之外,配置文件中没有任何设置。

我在 OSX 上使用 PhantomJS 最新版本(1.3.0 jar 和 2.1.1 驱动程序 OSX)。

请注意,出于某种原因,该示例确实可以使用 Chrome Webdriver。

import geb.spock.GebSpec
import org.openqa.selenium.Cookie

class SetCookieIT extends GebSpec {
    def "Cookie example"() {
        given:
        def options = driver.manage()

        when:
        go "https://www.wikipedia.org/"
        then:
        !options.getCookieNamed("my-geb-cookie")

        when:
        options.addCookie(new Cookie("my-geb-cookie", "foobar"))
        go "https://www.wikipedia.org/"
        then:
        title == "Wikipedia"
        options.getCookieNamed("my-geb-cookie").value == "foobar"
    }
}

【问题讨论】:

标签: selenium groovy phantomjs geb


【解决方案1】:

维基百科的域名中没有“ie”拼写,“org.com”看起来也很奇怪。也许下次您想提供一个实际上可执行且有意义的示例。 :-7

对我来说这很好用:

package de.scrum_master.stackoverflow

import geb.spock.GebReportingSpec
import org.openqa.selenium.Cookie

class SetCookieIT extends GebReportingSpec {
  def "Cookie example"() {
    given:
    def options = driver.manage()

    when:
    go "https://www.wikipedia.org/"
    then:
    !options.getCookieNamed("my-geb-cookie")

    when:
    options.addCookie(new Cookie("my-geb-cookie", "foobar"))
    go "https://www.wikipedia.org/"
    then:
    title == "Wikipedia"
    options.getCookieNamed("my-geb-cookie").value == "foobar"
  }
}

如果您还有其他问题,请更新您的问题并提供SSCCE 以重现实际问题。


更新问题修改后:PhantomJS的问题是如果你没有明确指定域,它会拒绝创建cookie。这有效:

options.addCookie(new Cookie("my-geb-cookie", "foobar", ".wikipedia.org", "/", null))

【讨论】:

  • 谢谢!我已经更新了这个例子……我在用我们的内部地址替换时打错了维基百科。尽管如此,使用您的示例(不是我只将 GebReportingSpec 更改为 GebSpec).. 我仍然遇到同样的错误。
  • 更新...这似乎与 OSX 上的 PhantomJS 有关,Chrome 驱动程序适用于该示例,PhantomJS 不适用,正在调查中。
  • 多么有趣!我还在我的 Win10 盒子上进行了测试。它看起来确实与 PJS 相关,因为它适用于 IE、Edge、chrome、Firefox、HtmlUnit。
  • 谢谢@kriegaex .. 经过额外的调试,我已经将其追溯到 PhantomJS,不确定 Stackoverflow 用于更改问题的正确方法是什么.. 在这一点上是:为什么最新版本的尝试设置 cookie 时,OSX 上的 PhantomJS 会爆炸。
  • 您更改问题的速度比我提供答案的速度更快。我已经用 PhantomJS 的解决方案更新了我的答案。如果这个故障是由于 PJS 本身还是 Ghostdriver 造成的,我不知道。另请注意:这不是 MacOS 特有的,而是 PJS 特有的,在 Windows 下的行为是相同的。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 2016-09-23
  • 1970-01-01
  • 2015-10-17
  • 2016-11-01
  • 2016-06-10
  • 2016-04-20
  • 2014-03-20
相关资源
最近更新 更多