【问题标题】:Selenium/Watir: 'InvalidCookieDomain' error when trying to add cookieSelenium/Watir:尝试添加 cookie 时出现“InvalidCookieDomain”错误
【发布时间】:2017-06-08 06:50:50
【问题描述】:

我是 WATIR 或 Selenium 的新手,但我试图在我的 WATIR 浏览器中添加一个 cookie,如下所示:

browser = Watir::Browser.new :firefox    
browser.goto(url)
browser.cookies.add name,value, domain: ".www.example.com"

我收到以下错误提示:

Selenium::WebDriver::Error::UnknownError: ReferenceError: InvalidCookieDomainError 未定义

但是,当我删除域选项时,它会起作用。

我想知道为什么我不能在我的 cookie 中添加不同的域?

【问题讨论】:

    标签: ruby-on-rails selenium watir


    【解决方案1】:

    WATIR 一样,所有基于 Selenium 的框架都会为 Selenium 预定义命令创建特定于语言的包装器。这些命令在 Selenium Webdriver W3C 标准中定义为 here

    如果您转到 Cookies 部分,特别是 addCookie 子部分,您将看到以下内容:

    如果当前浏览上下文的文档元素是 cookie-averse Document object,则返回带有 error code invalid cookie domain 的错误。

    您的domain 属性与您给定的url 绑定到同一个域。因此,基本上,您的域 HAS 与您当前的 urlurl 的子域相同。

    示例:对于url=global.nba.com,您可以为子域 ({domain: "global.nba.com"}) 和根域 ({domain: "nba.com"}) 设置 cookie。

    browser = Watir::Browser.new :firefox    
    browser.goto(url)
    browser.cookies.add("<yourCookieName>","<yourCookieValue>", {domain: "<sameUrlOriginDomain>"})
    

    希望这会有所帮助!

    【讨论】:

    • 嘿,谢谢你的回答,但是如果我想在"global.nba.com" 之前添加点"." 那么它将是".globla.nba.con",因为我想在原始网址之前添加点?
    • @taylor 据我所知,是的,只要它不干扰我刚刚告诉你的相同起源规则。因此,您要在其上添加 cookie 的 url 必须是您正在使用的域的父级或直接兄弟级。你能举个例子让我们验证一下吗?如果它回答了您的问题,也接受答案。谢谢。
    • @taylor 我刚刚测试了这个功能,它允许在域值前面加上一个点 (.)。
    • 谢谢老哥,有帮助
    • goto() 调用之后 设置cookie 有什么意义?我们想设置它之前,不是吗?
    【解决方案2】:

    在我的情况下,我必须先访问 url,然后再设置 cookie,例如

          visit root_path
          ('f'..'k').each.with_index do |cookie, index|
            Helper::Browser.set_cookie(:esid, cookie)
            visit root_path
          end
    

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2023-03-14
      • 2021-06-29
      • 2011-11-21
      相关资源
      最近更新 更多