Без лишнего boilerplate кода. Enum здесь избыточен и никакой полезной нагрузки не несет.
Ну как не несет. Доступ не по переменной, а по Enum который возвращает: 1. By, 2 WebElement или вообще строит полный путь к элементу. 3. все находится в одном месте, не надо листать кучу переменных.
Потому как решения через переменные с аннотацией FindBy, я считаю не красивыми, а даже костыльными, когда нужно построить зависимость элементов.
Можете привести красивое решение?
Вот пример другой страницы WikrGroup_exercise/PersonalData.java at master · shyster/WikrGroup_exercise · GitHub
тут NAME_LABEL родительский элемент для VALUE. Можно заметить, что VALUE описан один раз но его использует 2 элемента.
Какие минусы я вижу:
- Нужно писать Enum, что как бы чуть больше чем FindBy.
- Полный путь забирает чуть больше времени.
- Отладка, если элемент не найден, может быть чуть сложнее, решается логированием.
Из плюсов: - Все в одном месте
- Можно строить зависимости, что очень полезно.
- Чуть переделать и можно работать с готовыми компонентами, указывая только локатор компонента.
Меньше слов - больше кода
1 лайк
Вот еще вариант:
@locator(By.ID, 'my-sales')
class MySales(WebPage):
def __init__(self):
self.spn_loader = Spinner(By.CLASS_NAME, "loader__local")
self.slc_period = SelectList(By.CSS_SELECTOR, 'div[data-qa="period"]')
self.slc_compare_to = SelectList(By.CSS_SELECTOR, 'div[data-qa="compare-to"]')
Красиво, понятно, молодежно.