Все страницы инициализированы в классе Application, и они возвращают новый интсанс страницы при каждом вызове страницы в тесте. Подскажите, что нужно изменить для того чтобы не создавался новый инстанс страницы при ее неоднократном вызове в тесте.
public class Application {
private WebDriver driver;
public Application(Webdriver driver){
this.driver=driver; }
public LoginPageElements loginPage(){
return new LoginPageElements(driver); }
}
пример страницы -
public class LoginPageElements{
private Webdriver driver;
public LoginPageElements(WebDriver driver)
{
this.driver = driver;
}
@FindBy(how=How.ID, using="")
private WebElement loginID;
public void Login_as(String username){
loginID.sendkeys(username) }
}
Делается дженерик класс для работы со страницами, который в первый раз создаёт объект и записывает его в переменную, а далее при обращении к странице смотрит, есть ли уже созданный объект этой страницы, и если есть - возвращает его
Пример такого варианта на шарпе может выглядеть так:
public static class Pages
{
public static T GetPage<T>() where T : BasePage, new()
{
T page;
var pageType = typeof(T);
if (!_pagesTypesList.Contains(pageType))
{
page = new T();
_pagesTypesList.Add(pageType);
_initializedPagesList.Add(page);
return page;
}
page = (T) _initializedPagesList.First(_ => _.GetType() == pageType);
return page;
}
}
Если у Вас в тесте данная страница открывается один раз и потом нет переходов на другие страницы или перезагрузок страницы: синглтон (или переменная в классе Application c if на существование) - вполне себе решение. Но если в процессе теста Вы: переходите по разным страницам; перезагружаете страницу; закрываете/открываете браузер и т.д. То необходимо каждый раз пересоздавать PageObject-объект (как уже сделано у Вас в коде). Это связано с тем, что при, выше описанных, действиях ссылки на WebElement в драйвере будут уже другие и Вашь, ранее созданный, PageObject-объект будет генерить Вам кучу ошибок при любой попытке сделать с ним что-либо.