Как вы объявляете веб-элементы пэдж-обжекта? (парочка примеров)

Без лишнего boilerplate кода. Enum здесь избыточен и никакой полезной нагрузки не несет.

Ну как не несет. Доступ не по переменной, а по Enum который возвращает: 1. By, 2 WebElement или вообще строит полный путь к элементу. 3. все находится в одном месте, не надо листать кучу переменных.
Потому как решения через переменные с аннотацией FindBy, я считаю не красивыми, а даже костыльными, когда нужно построить зависимость элементов.
Можете привести красивое решение?
Вот пример другой страницы WikrGroup_exercise/PersonalData.java at master · shyster/WikrGroup_exercise · GitHub
тут NAME_LABEL родительский элемент для VALUE. Можно заметить, что VALUE описан один раз но его использует 2 элемента.
Какие минусы я вижу:

  1. Нужно писать Enum, что как бы чуть больше чем FindBy.
  2. Полный путь забирает чуть больше времени.
  3. Отладка, если элемент не найден, может быть чуть сложнее, решается логированием.
    Из плюсов:
  4. Все в одном месте
  5. Можно строить зависимости, что очень полезно.
  6. Чуть переделать и можно работать с готовыми компонентами, указывая только локатор компонента.

Меньше слов - больше кода :slight_smile:

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"]')

Красиво, понятно, молодежно.