Привет,
Нужна помощь сообщества так как ruby and cucmber только начал курить.
Есть feature типа
Feature: Checking all buttons on main page
Scenario Outline: The message "Don't push the button" displays if user clicks the button
Given: I login as a "user"
And Can see the "page"
When I click "<button>"
Then I can see "Don't push the button"
Examples: Buttons
|button|
|button#1|
|button#2|
|button#3|
Если запустить код, то он для каждой кнопки запустит браузер кликнет и закроет браузер. Очень бы хотелось не запускать браузер каждый раз, а запустив его один раз прокликать все кнопочки.
Вопрос - как этот сделать? Полагаю, что можно создать функцию “клик” и скормить ей array с названиями кнопок, Но как вытащить все названия из feature за один раз и вставить в array пока не понимаю. Плиз подскажите как правильно написать эту фичу и код (ЗЫ на руби полторы недели и до сих пор в ужасе так что не пинайте сильно)
Вы не правильно используете examples. Examples это для data-driven тестов, каждая строка из таблицы будет использоваться как аргумент к вашему тесту. Соответсвенно в вашем случае сценарий выполнится 3 раза. Вам нужно переделать логику теста, ну или как минимум сделать инициализацию драйвера и его закрытие в hook’ах.
Подскажу один момент, в одном тесте должна быть одна проверка, либо проверяться связанные сущности, например: после нажатия на кнопку появляется сообщение и в бд создается запись. Очевидно что проверять отдельно сообщение и запись в бд нет смысла, т.к. это одна сущность.
Если вкратце, то тест должен выглядеть как-то так:
пердусловие функции (feature setup)
сценарий:
предусловие сценария (scenario setup) (не обязательный элемент)
действие (step)
проверка результата (step) (может быть несколько)
постусловие сценария (scenario teardown) (не обязательный элемент)
постусловие функции (feature teardown)
Да, я согласен с вами полностью. Правильнее написать сценарий для каждой “кнопки” - нажал кнопку и проверил результат. Но засада в том, что мне нужно избежать перезапуска браузера для каждого сценария. Т.е. есть feature файл с 10 сценариями, которые могут исполниться в одну сессию - но я не понимаю пока как это сделать. При этом в другом файле лежат сценарии которые должны быть запущены в разные сессии. Т.е у меня технический вопрос - как сказать руби - запусти все в одну сессию для конкретного feature файла
Спасибо
Thanks! Yes I understand my faults. Could you help me how to extract this data-table into array or hash? I google it but can not find the solution.
Thanks!
Я пишу на Cucumber JS, но суть одна.
В общем, у вас браузер инициализируется в World, а он инициализируется на каждый сценарий.
Как написали выше - тут помогут хуки: BeforeFeatures (как на руби - не знаю, поищете) - тут вы должны стартовать инстанс браузера вне world и передавать его в world, а в AfterFeatures - его убить.
Второй вариант - when I click и then I can see - объединяете в один step, туда передаете data-table и внутри степа сразу пробегаетесь по функионалу кнопки. Не самый лучший вариант, но иногда вполне подходит.