Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

page-object
selenium
webdriver
Теги: #<Tag:0x00007fedb85fef30> #<Tag:0x00007fedb85fedc8> #<Tag:0x00007fedb85fe9b8>

(vmaximv) #61

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


(Vladislav Kulasov) #62

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

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

(vmaximv) #63

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


(Oleg Kuzovkov) #64

Вот еще вариант:

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

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