Как написать свою реализацию WebElement?

Для чего: хочу иметь дополнительные методы у веб элемента, которые нужны только в моем проекте. На пример клик не стандартный и тд.

Что пробовал: первое что пришло в голову унаследоваться от RemoteWebElement

public class MyElement extends RemoteWebElement {
}

но код MyElement element = (MyElement) driver.findElement(By.cssSelector(“body”)); ругается

…ClassCastException: …RemoteWebElement cannot be cast to …MyElement

1 лайк

driver.findElement(By.cssSelector(“body”)) повертає обєкт RemoteWebElement, тому і маєте ексепшин при приведенні до MyElement.

Зазвичай свої елементи реалізовуються приблизно так:

public class MyElement implements WebElement {

    private final WebElement element;

    public MyElement(WebElement element) {
        this.element = element;
    }

   //additional methods ...
}

і тоді в коді

MyElement element = new MyElement(driver.findElement(By.cssSelector("body")));

к сожаленью этот вариант не подходит, нужно через PageFactory работать, то бишь такой код должен срабатывать

@FindBy(что то)
private MyElement element;

Тогда пробуйте так, например:

Это уже сделано:
http://htmlelements.qatools.ru/

2 лайка

Это уже сделано:

См. Конкретный пример: https://github.com/codeborne/selenide/tree/master/src/test/java/integration/customcommands

4 лайка