Всем привет.
Давно хотел создать метод generic типа, так сказать освоить работу с дженериками. Использую Selenide.
В итоге, написал метод, открывающий страницу в новой вкладке и возвращающий объект этой страницы
@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; }
Вопрос теперь: как вызвать этот конструктор в моём методе ? или есть другой способ инициализации элементов загруженной страницы ? Спасибо