На странице сайта есть 3-4 одинаковые по смыслу кнопки - перейти в корзину , какие-то силенидом ищутся по тексту какие-то только по value.
в разных сценариях на геркин соответственно жмутся разные кнопки
но в сценариях кукумбера хочется как-то унифицировать и объединить поиск таких кнопок, ну например если из всех кнопок “добавить в корзину” мне необходимо нажать вторую или 4
но чтобы не особо пришлось плодить разных отдельных методов
до этого момента необходимые кнопки находились вот так :
строка сценария на геркин :
Если нажать на кнопку Добавить в корзину
метод:
@Если("^нажать на кнопку (.+)$")
public void clickButton(String nameButton) {
$(byText(nameButton)).shouldBe(Condition.visible).click();
}
Немного писал тесты на Cucomberjs, насколько я знаю там немного другая парадигма написания шагов. И описывать подробные действия не совсем правильно. Первая проблема с которой вы столкнетесь это отсутствие инкапсуляции и соответственно вы будете видеть все похожие действия. Как я понимаю, описывать нужно только бизнес логику, более высокоуровнево, а реализацию скрывать внутри. Я писал в стиле как советуют в этом посте
У программного обеспечения есть такой параметр, называемый testability. Сложность тестируемости.
О чем это может подсказать?
Это напоминает тестировщику о том, что он влияет на качество продукта через процесс тестирования.
Процесс тестирования чем проще и более отлажен, тем легче обеспечивать качество по.
Следующий вопрос - как упрощать процесс тестирования через testability?
В вашем случае, нужно сходить в систему версионного контроля и добавить для каждой кнопки уникальный тестовый идентификатор и согласовать это с разработчиками.
Это станет вашим локатором для тестов.
Вам ещё повезло, так как это юай тестирование. В более сложных системах внесение таких изменений затруднено и стоит намного дороже.
Если бы ваша кнопка была бы в блоке/группе/панели с названием, то можно передавать название кнопки и название этого блока/панели/группы, например: Если нажать кнопку Добавить в корзину в блоке <тут название блока>