无法得到,elsif步骤上班(watir-webdriver)

时间:2012-12-04 15:35:34

标签: ruby if-statement cucumber watir-webdriver

我正在使用watir-webdriver。这是我的步骤def,有人可以纠正我在这里做错了什么。我正在尝试使用一组详细信息进行注册。如果已经使用了第一组细节,我希望它使用第二组细节,依此类推。不幸的是,当测试运行时,它似乎只使用第一组和第二组细节。它不会移动到第三组。请帮忙或建议。

Given /^I have signed up as a lender'$/ do
  @browser.link(:text, 'Join').click
  @browser.radio(:id, 'user_group_name_lenders').set
  @browser.text_field(:id, 'user_username').set('qw@qw.com')
  @browser.text_field(:id, 'user_username_confirmation').set('qw@qw.com')
  @browser.text_field(:id, 'user_login_password').set('qwe123')
  @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')
  @browser.button(:value, 'Sign up').click
  if @browser.h1(:text, 'Investor signup').exists?
    @browser.text_field(:id, 'lender_lender_profile_attributes_first_name').should exist
  elsif @browser.label(:text, 'has already been taken').exists?
    @browser.radio(:id, 'user_group_name_lenders').set
    @browser.text_field(:id, 'user_username').set('we@we.com')
    @browser.text_field(:id, 'user_username_confirmation').set('we@we.com')
    @browser.text_field(:id, 'user_login_password').set('qwe123')
    @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')
    @browser.button(:value, 'Sign up').click
    @browser.h1(:text, 'Investor signup').exists?
  elsif @browser.label(:text, 'Email *').exists?
    @browser.radio(:id, 'user_group_name_lenders').set
    @browser.text_field(:id, 'user_username').set('er@er.com')
    @browser.text_field(:id, 'user_username_confirmation').set('er@er.com')
    @browser.text_field(:id, 'user_login_password').set('qwe123')
    @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')
    @browser.button(:value, 'Sign up').click
    @browser.h1(:text, 'Investor signup').exists?
  elsif @browser.label(:text, 'Password *').exists?
    @browser.radio(:id, 'user_group_name_lenders').set
    @browser.text_field(:id, 'user_username').set('rt@rt.com')
    @browser.text_field(:id, 'user_username_confirmation').set('rt@rt.com')
    @browser.text_field(:id, 'user_login_password').set('qwe123')
    @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')
    @browser.button(:value, 'Sign up').click
    @browser.h1(:text, 'Investor signup').should exist
  else @browser.link(:text, 'Terms & Conditions').exists?
    @browser.radio(:id, 'user_group_name_lenders').set
    @browser.text_field(:id, 'user_username').set('ty@ty.com')
    @browser.text_field(:id, 'user_username_confirmation').set('ty@ty.com')
    @browser.text_field(:id, 'user_login_password').set('qwe123')
    @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')
    @browser.button(:value, 'Sign up').click
    @browser.h1(:text, 'Investor signup').should exist
  end
end

1 个答案:

答案 0 :(得分:1)

我认为你误解了if-elsif-else语句是如何工作的。只会执行一个if / elsif / else代码块中的一个。换句话说,声明永远不会尝试“we@we.com”,如果失败,请尝试“er@er.com”。

如果意图只是尝试每个用户,直到成功注册,您可以迭代用户名:

Given /^I have signed up as a lender'$/ do
    user_names = ['qw@qw.com', 'we@we.com', 'er@er.com', 'rt@rt.com', 'ty@ty.com']

    user_names.each do |user_name|
        @browser.radio(:id, 'user_group_name_lenders').set
        @browser.text_field(:id, 'user_username').set(user_name)
        @browser.text_field(:id, 'user_username_confirmation').set(user_name)
        @browser.text_field(:id, 'user_login_password').set('qwe123')
        @browser.text_field(:id, 'user_login_password_confirmation').set('qwe123')      
        @browser.button(:value, 'Sign up').click

        break if @browser.h1(:text, 'Investor signup').exists?
    end
    @browser.text_field(:id, 'lender_lender_profile_attributes_first_name').should exist
end

这将依次尝试每个用户名,直到其中任何一个工作或用完您的用户名。