Можно ли получить экземпляр драйвера внутри HtmlBlock в HtmlElements?

Я использую HtmlElements ( https://github.com/yandex-qatools/htmlelements) фреймворк для моих веб-тестов на Java. Можно ли получить экземпляр веб-драйвера внутри HtmlBlock? Например, реализовать дополнительную логику в некоторых полях или реализовать функцию для ожидания ajax полный.

2 ответа

Посмотрите на этот фрагмент кода:

@Name("Search form")
@FindBy(xpath = "//form[@class='f1']")
public class SearchArrow extends Test1 {
    public WebDriver driver;
}

public class SearchPage {
    @FindBy(xpath = "//form[@class='f1']")
        private SearchArrow searchArrow;

    public SearchPage(WebDriver driver) {
        HtmlElementLoader.populatePageObject(this, driver);
        searchArrow.driver = driver;
    }
}

Первоначально: https://gist.github.com/artkoshelev/4751a4f1b34211e43f4e

Как я вас понимаю. Вам нужен WebDriver в вашем классе блоков страниц, а не в классе страниц.

Простой, но не элегантный способ - создать статическую переменную и сохранить в ней экземпляр WebDriver, чтобы получить возможность использовать WebDriver в любом месте вашего кода.

Кроме того, я полагаю, вы экземпляр Pages в вашем тесте и в конструкторе страниц, который вы вызываете

    HtmlElementLoader.populatePageObject(this, driver);

Но я думаю, что вы можете попытаться запустить свой блок вручную.

class Page {
    @FindBy(...)
    HtmlBlock block;

   public Page(){
       HtmlElementLoader.populatePageObject(this, driver);
       this.block = new HtmlBlock(driver);
   }
}

А в HtmlBlock создайте конструктор, который сохранит WebDriver в локальном поле.

public HtmlBlock(WebDriver driver){
    this.driver = driver;
    HtmlElementLoader.populatePageObject(this, driver);
}

Я не уверен во втором варианте, но что-то вроде этого должно работать.

Другие вопросы по тегам