在我的功能文件中,我有类似的内容:
Background:
Given I am on login screen
Then I log in
Scenario:
Given I am on a random account summary
when I try feature-1
Then I see some output-1
Scenario:
Given I am on account summary
When I try feature-2
Then I see some message
当黄瓜执行第二种情况时,它会重新执行背景。
我的问题是 - 是否可以告诉Cucumber使用上一个场景中的相同浏览器会话/状态? 这将有助于我的测试节省一些执行时间。
答案 0 :(得分:4)
Capybara会在每个场景之前重置会话,因此您应该在每个场景之前明确登录。但是,由于您没有在每个场景中测试登录,我建议自动执行此过程。
首先,您可以使背景更具说明性:
Background:
Given I'm logged in
看看this article,它说明为什么最好这样做。
然后你可以:
page.driver.browser.manage.add_cookie(name: 'name', value: 'value')
page.driver.browser.set_cookie('c_user=asdasdasd; domain=.domain.com')
page.driver.set_cookie('name', 'value')
RackTest似乎并不完全支持它。作为一种解决方法,您可以这样做:
get new_service_request_path, {}, 'HTTP_COOKIE' => 'name=value'
答案 1 :(得分:0)
我认为你有许多选项使用Before和After钩子,以及标记。我开始在这里阅读:https://github.com/cucumber/cucumber/wiki/hooks
这样的事情:
Before do
AccessRandomAccountPage() #Assumes you're logged in already
end
或者,如果这是特定于一组测试,例如你是“AlreadyLoggedIn”测试,你可以使用标记:
Before ('@AlreadyLoggedIn') do
AccessRandomAccountPage()
end
答案 2 :(得分:-1)
在您的功能文件中,您使用的是后台:,它是针对所有场景执行的,为了避免每次调用(details of Background),请将后台更改为场景:并且足以告诉它黄瓜使用上一个场景中的相同浏览器会话
Scenario:
Given I am on login screen
Then I log in
Scenario:
Given I am on a random account summary
when I try feature-1
Then I see some output-1
Scenario:
Given I am on account summary
When I try feature-2
Then I see some message