Всем привет.
Давно хотел создать метод generic типа, так сказать освоить работу с дженериками.
В итоге, написал метод, открывающий страницу в новой вкладке и возвращающий объект этой страницы
@Step("Открываем новую страницу по ссылке {0} и возвращаем объект страницы {1}")
public static <T extends PageBase> T openPageInNewTab(String url, Class<T> page) {
Selenide.executeJavaScript("window.open('"+url+"','_blank');");
switchTo().window(getWebDriver().getWindowHandles().size()-1);
new WebDriverWait(getWebDriver(), 20)
.until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
sleep(5000);//без этого слипа поля нового объекта page будут null
try {
return page.newInstance();
} catch (InstantiationException | IllegalAccessException ex) {
throw new RuntimeException("Не получилось создать объект страницы " + page.getSimpleName());
}
}
Проблема моя заключается в том, что без sleep(5000)
, все поля возвращаемого объекта page
будут null
. Хотелось бы избавиться от слипа. Вероятно, такой конструктор, создаваемой страницы, проинициализирует элементы объекта
public SkillServicePage(WebDriver driver){
PageFactory.initElements(driver, this);
this.driver = driver;
}
Вопрос: как вызвать этот конструктор в моём методе ? или есть другой способ инициализации элементов загруженной страницы ? Спасибо