使用javascript设置cookie在Poltergeist和/或PhantomJS中不起作用

时间:2013-06-20 01:36:39

标签: cucumber phantomjs poltergeist

我有一个网页,用document.cookie = value设置一个cookie,它在服务器上运行时效果很好。

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

测试流程为:

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

    在针对正在运行的服务器的真实浏览器中,没关系。

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

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

1 个答案:

答案 0 :(得分:6)

原来我从some other page得到了一些不好的建议,这实际上干扰了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

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