在功能中使用不同场景中的变量值,水豚

时间:2015-03-16 23:42:16

标签: variables capybara

我有4个场景的功能。我想在不同的步骤和场景2中使用我在场景1中设置的1个变量的值。

我使用$但是没有设置。我假设某个功能<$ p>的$ value保持不变

When(/^the user goes to manageusers, picks one of the secondary users$/) do
  click_link "Admin"
  click_link "Manage Users"
  emailofuser=ENV["email"].to_s
  atpos = emailofuser.index('@')
  emailofuser = emailofuser[0,atpos]
  page.body.to_s.scan(/<td>(.*?)@ABC.com<\/td>/).flatten().each do |w|
    if "#{w}" != emailofuser
    $secondaryUserEmail = "#{w}" + "@ABC.com"
    break
    end
  end
end

When(/^the secondary user logs in with password "([^"]*)"$/) do |arg|
  if  getURL != URI.parse(current_url)
    visit getURL
  end
  find(:xpath,"//input[@id='user_email']").set($secondaryUserEmail )
  fill_in "user_password", :with => arg
  click_button "Sign in"
end

在上面的步骤中,步骤在功能文件中的1个场景中,我在功能中的场景2中也具有相同的步骤辅助用户。变量$ secondaryuserEmail有时没有设置,登录为次要用户失败。

对我来说,最好的方法是声明我可以跨场景中的各个步骤以及功能中的各个场景访问的变量。

1 个答案:

答案 0 :(得分:0)

您应该找出$ secondaryuserEmail未设置的原因。这听起来像是你正在测试的app中的某个地方的bug。如果它不是错误,您应该尝试处理异常。

对于您的原始问题,在辅助方法中设置变量可能是个好主意,然后调用这些方法以使用实例变量访问它们。大多数人一般建议不要跨场景共享变量,但是我使用了帮助方法来存储我的规范中通常不变的变量。