Cucumber 如何防止呼叫访问(uri)后会话丢失?

Cucumber 如何防止呼叫访问(uri)后会话丢失?,cucumber,capybara,Cucumber,Capybara,这对水豚和黄瓜(以及一般的测试)来说是相当新的 我正在做一些黑盒验收测试,我需要测试一个只能通过键入url访问的页面 该页面需要身份验证,因此当通过调用visit()访问该页面时,我将被重定向到登录页面 问题是,登录应用程序后,不会将我重定向回该页面,而是转到主页,因此我不能只填写登录表单,然后继续 我尝试先登录,然后调用该页面,但在调用visit()后,会话似乎被清除 我如何在接到拜访电话后保持会话,或以任何其他方式解决此问题 理想情况下,我只想登录一次,访问一堆只能通过键入uri访问的页面,

这对水豚和黄瓜(以及一般的测试)来说是相当新的

我正在做一些黑盒验收测试,我需要测试一个只能通过键入url访问的页面

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

问题是,登录应用程序后,不会将我重定向回该页面,而是转到主页,因此我不能只填写登录表单,然后继续

我尝试先登录,然后调用该页面,但在调用visit()后,会话似乎被清除

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

理想情况下,我只想登录一次,访问一堆只能通过键入uri访问的页面,而无需反复登录。可能吗

我只使用chrome selenium驱动程序,但在某些情况下会使用无头驱动程序

谢谢

Given I am registered
And  I am logged in
When I visit the test page
...
这些可以按如下方式实现: 给“我注册了”怎么办 #尽一切可能注册 结束

您认为每次拜访后您的会话都会被清除的想法是错误的。每个场景都有自己的会话,您可以在一个场景中执行多次访问。但是,您必须确保在一个场景中登录(并注册)

这些可以按如下方式实现: 给“我注册了”怎么办 #尽一切可能注册 结束


您认为每次拜访后您的会话都会被清除的想法是错误的。每个场景都有自己的会话,您可以在一个场景中执行多次访问。但是,您必须确保在一个场景中登录(并注册)

正如@diabolist的回答正确指出的那样,
visit
不会重置任何会话(只要您的登录操作等待足够长的时间,以便实际登录并设置cookies)(期望收到一条消息,说明您已登录,或
具有当前路径(根路径)
等)。相反,会话会在不同场景之间重置


在一种情况下,如果您正在登录,然后在
访问您希望登录的页面时发现您没有登录,那么您可能实际登录到了错误的域。默认情况下,水豚将访问主机上的路径
127.0.0.1
-如果您正在访问该页面,但您的应用程序正在重新启动点击
localhost
(或
www.example.com
等)对于登录,会话cookie将被设置在错误的域中,当您访问
127.0.0.1
上的页面时,您将无法登录。如果是这种情况,您可以更改
Capybara.server\u host
,或者修复您的应用程序,使其重定向到测试环境中的正确位置。

如@diabolist的回答所示正确地说,
visit
不会重置任何会话(只要您的登录操作等待足够长的时间,以便实际发生登录并设置Cookie(说明您已登录的消息上的期望值,或
具有当前路径(根路径)
等)。相反,会话会在不同场景之间重置


在一种情况下,如果您正在登录,然后在
访问您希望登录的页面时发现您没有登录,那么您可能实际登录到了错误的域。默认情况下,水豚将访问主机上的路径
127.0.0.1
-如果您正在访问该页面,但您的应用程序正在重新启动点击
localhost
(或
www.example.com
等)登录时,会话cookie将设置在错误的域中,当您访问
127.0.0.1
上的页面时,您将无法登录。如果是这种情况,您可以更改
Capybara.server\u host
或修复您的应用程序,使其重定向到测试环境中的正确位置。

这是域问题。谢谢!应用程序在登录到localhost时重定向,但这不是我正在测试的域,因此“访问”调用将在未经身份验证的会话上调用其他域。这是域问题。谢谢!应用程序在登录到localhost时重定向,但这不是我正在测试的域,因此“访问”call将在未经验证的会话上调用另一个域感谢您澄清了会话的范围。我的假设是基于我所经历的行为,但由于应用程序登录上的重定向,这实际上是一个域问题。感谢您澄清了会话的范围。我的假设是基于我所经历的行为但这实际上是一个域问题,因为应用程序登录时发生了重定向。
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