Здравствуйте. Осваиваю PageObject
Проблема такого рода. У меня есть
package. например packagepage1
в ней есть java class, например PageOne
в которой описываю то что есть на странице
public class PageOne {
By basicauthemail = By.id("email");
By basicauthpass = By.id("password");
By basicauthbutton = By.cssSelector("[data-testid='login-page-signin-button']");
так же есть второй package. например packagepage2
в нем есть java class, например PageTwo
В этом PageTwo мне надо использовать basicauthbutton из PageOne
Естественно
Что-то путано. PageOne и PageTwo описывают две разные страницы?
Ну тогда они и не должны переиспользовать друг друга.
В PageTwo должно быть своё поле basicauthbutton.
При определенных действиях на странице PageTwo переходит редирект на PageOne
Поэтому в описании теста PageTwo хочу воспользоваться basicauthbutton который уже описан в PageOne
А какой подход использовать, если на нескольких страницах есть одинаковые элементы, при изменений XPATH которого, хотелось бы в коде исправить XPATH только в одном месте, если использование STATiC переменных возбраняется?
Если страницы имеют, например, общее меню воспользуйтесь наследованием, если это просто блок, то вынесите локаторы в отдельный класс и добавляйте его в нужный page, типа компонента. Например у веб разработчиков сейчас весь ui в виде компонентов. В Java или c# это можно сделать в виде композиции, а если у вас просто статические локаторы в классе, то даже композиция не нужна, просто берете из этого компонента и используете где нужно.
Ну, во-первых, использование 1 пекеджа на 1 страницу - это по меньшей мере странно.
Во-вторых, если в тесте используется несколько страниц - инстанцируйте несколько и используйте правильную страницу, на которой находитесь в тесте на момент работы с конкретным контролом.
Типа так:
public void test() {
private PageOne pageOne;
private PageTwo pageTwo;
pageOne = new PageOne();
pageTwo = new PageTwo();
pageTwo.doSmthWithRedirect();
pageOne.doSmth();
}