t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как правильно взаимодействовать с элементами страницы?

locators
framework
java
webdriver
Теги: #<Tag:0x00007f9c5c8e0350> #<Tag:0x00007f9c5c8e01e8> #<Tag:0x00007f9c5c8e00a8> #<Tag:0x00007f9c5c8e1868>

(Gallagher) #1

В общем вопрос вот в чем: есть у меня к примеру метод(не использую никакой фреймворк)

public WebElement id(String id) {

        return wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));
    }

Потом есть у меня какой то метод, описывающий элемент страницы

public void selectPhone(String phone) {
        id("phone");
        id("phone").sendKeys(Keys.HOME);
        id("phone").sendKeys(phone);
    }

А уже в тесте я этому элементу просто задаю номер телефона как в данном случае

cartPage.selectPhone(cartPage.phone);

В общем вся логика у меня в методе selectPhone …
Но вчера смотрел выступление там чувака одного на Selenium Camp … он говорил о JDI фреймворке …
Так вот он там взаимодействует с элементами именно в тесте.
получается у него что-то типа

cartPage.selectPhone().sendKeys(phone);

Как правильно то?


(Vasiliy Rakshin) #2

Сто раз обсасывалось. И так и так подходит.
Как вам удобно.
Вам удобно копировать в тестах 3 строчки кода - делайте как этот чувак сказал (скорее всего, такой тест только один, и разумно не делать ещё один логический уровень).
Вам удобно иметь один метод который работает с нужным полем нужным образом - делайте как у вас сделано (скорее всего, этот метод будет использоваться во многих тестах).


(Alexandr D.) #3

Правильно - в тесте вызывать ТОЛЬКО методы.
А вся логика должна быть в них.
Иначе дублирование кода будет колоссальным и потом на исправление, например, ввода телефона, который будет использоваться во многих тестах уйдет в стопицот раз больше времени, чем исправление кода только в одном месте.

Так же модно, стильно, молодёжно делать инкапсуляцию элементов страницы, т.е. работать со страницей только посредством вызова методов класса, который её описывает, а непосредственно поле элемента делать приватным.