Есть у меня страничка со своим url.
Я для нее создала MyPageObject
Мне не нравится вариант open(url, MyPageObject.class), т.к. я привыкла url прятать внутри PageObject
Я сделала метод open в моем пейджобжекте и использую внутри него Selenide.open(baseUrl). Но в этом случае не очень красиво получается вызов этого самого метода open:
new MyPageObject().open();
Подскажите пожалуйста как принято это делать?)
И еще сразу вопрос про page(MyPageObject.class). Я не очень поняла что именно происходит внутри этого метода. Если я правильно понимаю, то там мы ожидаем загрузки страницы. Может кто-то более подробно объяснить?
Всем заранее спасибо)
А зачем нужно прятать url внутри page object? Это лишает возможности переиспользовать объекты для похожих страниц.
Но если хотите прятать, то да, вполне нормальный вариант new MyPageObject().open();
. А почему он кажется вам некрасивым?
Метод page(My page object.class)
почти ничем не отличается от new MyPageObject ()
, за исключением того, что он инициализирует поля с аннотациями @FindBy
.
Почему мешает? url держим в базовом классе, а в конструкторе страницы переопределяем.
При наследовании никто не мешает написать в конструкторе что-то типа
public SimilarPage extends SomePreviouslyCreatedPage(){
super();
this.url = "http://someurl.com"
}
Да, можно так, но дизайн сомнительный. Composition over inheritance.
P.S. Как минимум стоило бы написать super("http://someurl.com")
и сделать это поле private final
.
Можно и так, да.