#ruby #selenium #cucumber
#ruby #selenium #cucumber
Вопрос:
В настоящее время я пытаюсь определить многоступенчатое пошаговое определение в Cucumber (для Ruby), но у меня возникают проблемы с использованием переменной на одном из подэтапов. Ниже я пытаюсь использовать переменную «policy_name» на последнем подэтапе, но не могу заставить Cucumber распознать ее по значению переменной, вместо этого он продолжает использовать ее как строку.
Given("I should NOT be able to go back using the browser back button
after doing something {string}") do |policy|
step 'I click on "something"'
step 'I "do this" via computer'
step 'I click on the browser back button'
policy_name = case policy
when "policy1" then "something1"
when "policy2" then "something2"
end
step 'I should be on the "Specified" page
for #{policy_name}'
end
Комментарии:
1. Я должен был упомянуть, что для Ruby используется Cucumber.
Ответ №1:
Вы используете одинарные или двойные кавычки? Двойные кавычки допускают интерполяцию, в то время как одинарные кавычки будут просто использовать содержимое без перевода каких-либо переменных. "#{policy_name}"
должно работать, в то время как '#{any_variable}'
не должно работать.
Ответ №2:
Не пишите шаги, подобные этому, и не вкладывайте шаги, вы просто попадете в беспорядок. Также данные предназначены для настройки состояния, а не для выполнения чего-либо.
Если у вас такой сложный шаг, у вас есть два лучших варианта, чем этапы вложения
- Разбейте шаг на более простые шаги
- Уберите сложность из определений шагов во вспомогательные методы
Выполнение таких шагов, как «Когда я нажимаю что-то», контрпродуктивно. Этот шаг полностью посвящен тому, как что-то делается. Сценарии должны быть о том, ЧТО вы делаете, и ПОЧЕМУ это важно. Функции и сценарии предназначены не для программирования, они предназначены для описания поведения и должны быть очень простыми. Итак, вы должны написать что-то вроде
Scenario: When I foo then the back button is disabled
Given ...
When I foo
Then the back button should be disabled
примером для моего банка может быть
Scenario: Smile login disables back button
Given I am logged into smile banking
When I try and use the back button
Then I should see the back button disabled warning
Наконец, определение каждого шага должно быть просто вызовом вспомогательного метода. например
Given 'I am logged into smile banking' do
# NOTE: both params are also helper methods
login(site: smile_banking, user: create_user)
end
это позволяет перенести всю сложность из cucumber в код. Код может справиться со сложностью, Cucumber — нет.