0

私はwatir-webdriverを使用しています。これが私のステップデフです、誰かが私がここで間違っていることを私に訂正できますか?一連の詳細を使用してサインアップしようとしています。最初の詳細セットがすでに使用されている場合は、2番目の詳細セットを使用するようにします。残念ながら、テストを実行すると、最初と2番目の詳細セットしか使用されていないようです。3番目のセットには移動しません。助けたりアドバイスしたりしてください。

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
4

1 に答える 1

1

if-elsif-elseステートメントがどのように機能するかを誤解していると思います。コードのif/elsif/elseチャンクのうち1つだけが実行されます。つまり、ステートメントは「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

これにより、いずれかが機能するか、ユーザー名がなくなるまで、各ユーザー名が順番に試行されます。

于 2012-12-04T17:29:16.513 に答える