Как спроектировать метод для работы с методами selenide?

page-object
java
selenide
webdriver
Теги: #<Tag:0x00007fedb91b1738> #<Tag:0x00007fedb91b15f8> #<Tag:0x00007fedb91b1300> #<Tag:0x00007fedb91b1198>

(Демид) #1

Пишу метод упрощающий чтение кода и никак не могу сделать его так, что бы он был универсальный

public class Pages {

public void searchByText(String text) {

    $(byText(text));

}

}

pages.searchByText("Текст");

Но хочется сделать так, что бы можно было работать с методами самого selenide через свой метод

Т.Е. вот так > pages.searchByText("Текст").shouldBe(visible);


(Vasiliy Rakshin) #2
public SelenideElement searchByText(String text) {
    return $(byText(text));
}

(Oleksandr Khotemskyi) #3

@BabyRoot правильно написал, но ваш подход не приносит ничего нового кроме дополнительного уровня абстракции. Я бы не писал такие методы а использовал бы селенидовские методы напрямую.


(Демид) #4

Суть задачи - создать подобие библиотеки для работы с проектом где порог вхождения для новичков будет минимален, именно по-этому селенайдовский доллар должен быть истреблён из основного класса с тестами


(Oleksandr Khotemskyi) #5

Как раз таки чем больше вы своих кастомных штук добавляете в проект - тем более высокий уровень вхождения.

  • Ваши штуки скорее всего документированы и протестированы хуже чем селенидовские оригинальные методы
  • В случае проблем - по оригинальным методам будет легче гуглить и спрашивать на этом форуме.
  • Меньше слоев абстракции, достаточно разобратся в API Selenide, не нужно учить методы которые только для этого проекта
  • Быстрей вхождение нового человека на проект если он уже знает Selenide - ему не нужно учить новые методы, аргументы, и переучиваться на новый стиль

(Alexandr D ) #6

Если уж совсем универсально делать, чтобы метод был один - то, что-то типа такого:

public SelenideElement SearchElement(SearchBy by, string value)
{
  switch (by)
    {
        ...
    }
}

Где SearchBy - енум со всем добром что вы хотите юзать в качестве поиска.

Ну и человек через intellisense сам выбирает что использовать для поиска и передаёт значение, а реализация конкретно в свитче уже.

Ну а так да - это не упрощение для новичков. Лишний геморрой.


(Oleksandr Khotemskyi) #7

Метод $ и так универсален, какую пользу приносит этот враппер кроме переименования?


(Демид) #8

Удобство в обращении с page object


(asolntsev) #9

Привет!
В чём именно заключается удобство? За что вы так ненавидите доллар? При создании Селенида как раз всё было сделано для того, чтобы порог вхождения для новичков будет минимален. Зачем же его истреблять?


(Fiodar Motin) #10

Не портите selenide).

Надо сделать еще RUB(By.id(" “)) и EUR(By.id(” ")) для тех кто против $


(Oleksandr Khotemskyi) #11

Согласен. А еще фича - при использовании CSS селекторов так вообще можно копипастить прямо из проекта в дев консоль. Никакой враппер searchByOLOLO так не сможет.

image


(Демид) #12

Чего же вы все так налетели то?, я учусь, это моя первая программа, и, я считаю, абсолютно нормальная практика, мне сейчас так удобнее писать тесты) image


(Демид) #13

Я понял и принял ваш совет ещё после первого комментария @xotabu4, ответ дан, тема закрыта.