这里是水豚和黄瓜的新手(并进行常规测试)。
我正在做一些黑匣子验收测试,我需要测试只能通过输入url才能到达的页面。
该页面需要身份验证,因此当通过调用visit()访问该页面时,我将被重定向到登录页面。
问题在于登录该应用程序后不会将我重定向到该页面,而是转到主页,所以我不能只填写登录表单并继续前进。
我尝试先登录,然后再执行对该页面的调用,但似乎在对visit()进行任何调用之后,会话都已清除。
如何在拜访电话后保持会话状态,或以其他任何方式解决此问题?
理想情况下,我想登录一次并访问一堆只能通过键入uri才能访问的页面,而不必一次又一次登录。有可能吗?
我只使用铬硒驱动器,但有时会使用无头驱动器。
谢谢!
答案 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
或修复您的应用因此它将重定向到测试环境中的正确位置。