Capybara在请求之间丢失cookie

时间:2016-03-16 18:13:14

标签: ruby-on-rails cookies capybara

我有以下测试:

  def login_user(email, password)
    visit new_user_session_path
    fill_in 'E-mail', with: email
    fill_in 'Password', with: password
    click_button 'go'
  end

  scenario 'some test' do
    order = Fabricate(:order_one, company: user.company)
    visit "http://127.0.0.1:49645/orders/#{order.id}" # change to visit "/orders/#{order.id}"
    login_user(user.email, user.password)

    #assert
  end

发生的事情是,在第一步(visit...)中用户未被记录,因此我使用cookie设置了一些信息。但是,当执行login_user时,此cookie为空。

Usigin selenium-webdriver

这里有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

当使用支持JS的驱动程序#visit时,不保证在返回页面时已完成加载页面。由于在处理响应之前未在浏览器中设置cookie,因此login_user实际上是在告诉浏览器停止处理它当前的访问并访问其他地方以阻止cookie在浏览器中设置。第一次访问后,您需要等待页面上可见的内容,以确保正确设置cookie。

scenario 'some test' do
  order = Fabricate(:order_one, company: user.company)
  visit "http://127.0.0.1:49645/orders/#{order.id}"
  expect(page).to have_content('you are not logged in') #or whatever shows on the page visited
  login_user(user.email, user.password)

  #assert
end