Как я могу проверить форму, которая требует ввода двух случайных символов из фразы безопасности? - PullRequest
1 голос
/ 12 мая 2010

Мне нужно протестировать двухэтапную систему входа в систему, которая сначала запрашивает ваш адрес электронной почты и пароль, а затем предоставляет пользователю два списка выбора, содержащие [a-zA-Z0-9]. Метки рядом с раскрывающимися списками имеют форму «Выберите символ X из вашей защитной фразы», ​​где X - индекс случайных символов из известной фразы безопасности.

Я бы лучше не заглушал код для приемочного теста, поэтому можно ли написать в огурце средство сопоставления, которое, учитывая, что мы знаем всю фразу, выберет требуемый символ в каждом из двух списков? *

Вот сценарий, который у меня есть, и соответствующие шаги:

Scenario: valid login email, password and secret phrase takes me to the dashboard
  Given I am not logged in
  When I log in as "admin@example.com"
  Then I should be on the dashboard page
  And I should see "Your Dashboard"

When /^I log in as "([^\"]*)"$/ do |login|
  visit path_to('Login page')
  fill_in "Email", :with => login
  fill_in "Password", :with => "Password123"
  click_button "Log in"
  response.should contain("Please verify some characters from your security phrase")
  select "a", :from => "Select character X of your security phrase"
  select "b", :from => "Select character Y of your security phrase"  
  click_button "Submit"
end

Например, если защитная фраза «Secret123», X = 3 и Y = 8, приведенное выше должно привести к эквиваленту:

select "c", :from => "Select character 3 of your security phrase"
select "2", :from => "Select character 8 of your security phrase"

Числа X и Y на текущей странице находятся внутри span # svc_1 и span # svc_2 соответственно.

Спасибо

1 Ответ

1 голос
/ 18 мая 2010

После долгих раздумий я наконец понял это. Документирование здесь, чтобы оно могло помочь кому-то еще в такой же ситуации. Вообще_степ.ру:

When /^I log in as "([^\"]*)"$/ do |email|
  visit path_to('Login page')
  fill_in "Email", :with => email
  fill_in "Password", :with => "password"
  click_button "Log in"
  response.should contain("Please verify some characters from your secret phrase")
  select_correct_secret_phrase_char("span#sec_1")
  select_correct_secret_phrase_char("span#sec_2")
  click_button "Submit"
end

def select_correct_secret_phrase_char(css_selector)
  response.should have_selector(css_selector) do |scope|
    select "Secret1"[(scope.text.to_i)-1].chr, :from => "Select character #{scope.text} of your security phrase"
  end
end
...