Как реализовать два шага, которые похожи - PullRequest
0 голосов
/ 15 октября 2019

Есть ли способ, как я могу реализовать два шага, как это (см. Ниже) в одной функции:

When I click on the "Button_name" button
When I click on the "Link_name" name

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

Обычно я буду реализовывать их отдельно с помощью чего-то вроде этого:

@ When ("^ Я смотрю на \" ([^ \ "] *) \" button $ ") public void smt (String smt) {}

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Если в разных контекстах одним нажатием кнопки и другой нажатием ссылки, рекомендуется использовать два разных шага.

Одна из плохих практик использования BDD - подумать о повторном использовании кода в шагах.

Когда внутри шага много логики, любая модификация может повлиять на многие тесты.

Следует позаботиться о повторном использовании кода в объектах страницы.

0 голосов
/ 16 октября 2019

Да, вы можете реализовать один шаг с одним методом и передать то, что было выбрано в качестве аргумента этому методу. Однако это усложнит ваш тестовый код. Поэтому, пожалуйста, подумайте, стоит ли вам . Сложная логика в тестовом коде усложнит понимание и сопровождение ваших тестов, что отрицательно скажется на их назначении.

Если вы хотите повторно использовать обычные функции, рекомендуется написать вспомогательные методы, из которых можно вызыватьваш шаг определения.

Например:

@When ("I click on the {string} button")
public void clickButton(String button) {
  clickButton(button);
}

@When ("I click on the "Link_name" name")
public void clickLink(String link) {
  clickLink(link);
}

и реализовать clickButton () и clickLink (), чтобы щелкнуть кнопку или ссылку соответственно. (В этом примере я использовал разные методы clickButton () и clickLink (), потому что в iirc они будут использовать различные типы элементов.)

Если необходимо (или вы действительно хотите использовать переключатель), вы можете использоватьоператор switch, чтобы использовать правильный селектор на основе имени кнопки или ссылки.

В качестве альтернативы вы можете реализовать объекты страницы, добавить все соответствующие селекторы для объекта страницы и вызвать метод соответствующего объекта страницы, который щелкает по этой конкретной ссылке / кнопке, делегируя логику для взаимодействия с пользовательским интерфейсом. объекты страницы и вызов этой логики из ваших определений шагов.

...