3

我有一个设置 cookie 的网页document.cookie = value,它在服务器上运行时可以完美运行。

但是,在我的黄瓜测试中(使用 Poltergeist/PhantomJS),cookie 不会从一页持续到下一页。

测试流程为:

  1. 页面 A 打开
  2. 用户点击一个按钮,触发 JS 设置 cookie
  3. 用户点击页面 B 的链接
  4. 页面 B 有一个反映 cookie 值的组件

在针对正在运行的服务器的真实浏览器中,这很好。

但是在 cucumber 中,第 4 步的显示显示它看到的是一个空白 cookie。

有谁知道我该如何解决或调查这个问题?

4

1 回答 1

6

结果我从其他页面得到了一些不好的建议,这实际上干扰了 Poltergeist 的自然行为。

我把那些废话拿出来,然后 Poltergeist 工作了。从那以后,我实现了一种更好的在测试中设置 cookie 的替代方法,一切都很好。

根据大众的需求,这是我的测试步骤中的 cookie-setter 代码:

case Capybara.current_session.driver
when Capybara::Poltergeist::Driver
  page.driver.set_cookie(k,v)
when Capybara::RackTest::Driver
  headers = {}
  Rack::Utils.set_cookie_header!(headers,k,v)
  cookie_string = headers['Set-Cookie']
  Capybara.current_session.driver.browser.set_cookie(cookie_string)
when Capybara::Selenium::Driver
  page.driver.browser.manage.add_cookie(:name=>k, :value=>v)
else
  raise "no cookie-setter implemented for driver #{Capybara.current_session.driver.class.name}"
end

重要警告:如果您使用上述代码通过测试步骤设置 cookie,则您的页面的 Javascript 可能不允许覆盖它。如果您的测试需要您的页面更改 cookie,您可能会发现 cookie 永远不会被更改。

于 2013-06-21T19:17:37.060 回答