Как работать с однотипными элементами (Selenium Webdriver)?
Условная задача: есть 100 инпутов на странице, которые отличаются только id. Требуется в каждый из них вводить текст и нажимать на кнопку.
Сейчас использую следующий подход:
1) имеется отдельный локатор для каждого инпута
2) имеется отдельная функция для каждого локатора, с идентичным кодом, которая обрабатывает и возвращает лишь разные локаторы
3) заполнение каждого инпута - отдельный кейс
Вопрос, корректна ли такая реализация? Разумнее ведь сделать одную общую функцию, которая будет принимать требуемый локатор. Но в таком случае, локатор придется передавать из самого тест-кейса. Прошу разъяснить, как правильно делать.
Попробуй искать по имени тега 'input', потом получать из имени атрибут айди и уже передавать его функции.
Получить атрибут можно таким образом:
web_elements = driver.find_elements_by_tag_name('input')
for element in web_elements:
element_id = element.get_attribute('id')
your_function(element_id)
Но тогда придётся из самих тест-кейсов вызывать её, передавая определённый локатор инпута.
Это разве правильно? Логика ведь должна быть отделена от тестов самих...
Если ты используешь pytest то напиши один тест-кейс и выполни его необходимое количество раз только с разными параметрами. Чтобы реализовать это используй фикстуры (опять же таки если ты используешь pytest). Подробнее об этом ты можешь найти тут: https://habr.com/ru/post/448786/
Надо заполнять по одному, нажимать на кнопку и проверять описание сообщения, то есть на каждый инпут свой кейс отдельный.
В том и вопрос, как правильно это реализовать.
Вот пример: функции отличаются только локатором, и таких, условно, 100 должно быть.
Дмитрий, да, вполне. "Отделять поиск элементов от логики тестов" - это рекомендация, но не строгое правило.
И в данном случае передавать локатор гораздо лучше, чем делать 100 одинаковых функций.