Перейти к содержимому

Фотография

Как вернуть объект страницы из generic метода

java generic PageObject

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 igorek9191

igorek9191

    Новый участник

  • Members
  • Pip
  • 22 сообщений


Отправлено 29 декабря 2018 - 12:29

Всем привет.

Давно хотел создать метод 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;
    }

Вопрос теперь: как вызвать этот конструктор в моём методе ? или есть другой способ инициализации элементов загруженной страницы ? Спасибо


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных