如何防止在致电visit(uri)后丢失会话?

时间:2019-01-12 13:23:46

标签: cucumber capybara

这里是水豚和黄瓜的新手(并进行常规测试)。

我正在做一些黑匣子验收测试,我需要测试只能通过输入url才能到达的页面。

该页面需要身份验证,因此当通过调用visit()访问该页面时,我将被重定向到登录页面。

问题在于登录该应用程序后不会将我重定向到该页面,而是转到主页,所以我不能只填写登录表单并继续前进。

我尝试先登录,然后再执行对该页面的调用,但似乎在对visit()进行任何调用之后,会话都已清除。

如何在拜访电话后保持会话状态,或以其他任何方式解决此问题?

理想情况下,我想登录一次并访问一堆只能通过键入uri才能访问的页面,而不必一次又一次登录。有可能吗?

我只使用铬硒驱动器,但有时会使用无头驱动器。

谢谢!

2 个答案:

答案 0 :(得分:2)

Given I am registered
And  I am logged in
When I visit the test page
...

这些可以实现为     鉴于“我已经注册”了       #做任何需要注册的事情     结束

Given "I am logged in"
  #visit log in form and fill in id|password
end

When "I visit the test page" do
  visit test_page_url
end

您的想法是在每次访问拜访后清除会话。每个方案都有自己的会话,您可以在一个方案中执行多次访问。但是,您必须确保在一种情况下登录(并注册)

答案 1 :(得分:2)

正如@diabolist正确回答的那样,visit不会重置任何会话(只要您的登录操作等待足够长的时间才能实际发生登录并设置cookie(期望一条消息,指出您已登录,或者have_current_path(root_path)等。相反,会话会在方案之间重置。

如果在一种情况下您正在登录,然后发现visit您希望登录的页面时未登录,则可能是您实际上登录了错误的地址域。默认情况下,水豚会访问主机127.0.0.1上的路径-如果您正在访问主机,但您的应用程序将重定向到localhost(或www.example.com等)进行登录,则会话Cookie将会在错误的域上设置,并且当您访问127.0.0.1上的页面时,您将无法登录。如果是这种情况,则可以更改Capybara.server_host或修复您的应用因此它将重定向到测试环境中的正确位置。