Использование @FindBy с моим собственным классом, а не с WebElement

Можно ли использовать @FindBy не только с WebElement, но и с моим собственным классом?

Я хотел бы иметь свой класс для взаимодействия с элементами страницы и переопределить в нем некоторые методы интерфейса WebElement.

Итак, я реализовал класс:

public class NamedElement implements WebElement {
    public boolean isDisplayed(){
        try{
            return element.isDisplayed();
        } catch (NoSuchElementException noElement) {
            return false;
        }
    }

И хотел бы объявить элемент следующим образом:

@FindBy(xpath = ".//a[contains(text(), 'Log in')]")
public NamedElement loginButton;

Но я получаю сообщение об ошибке:

java.lang.IllegalArgumentException: Can not set lenovo.tests.page.NamedElement field lenovo.tests.page.NCBLoginPage.loginButton to com.sun.proxy.$Proxy9
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:764)
at org.openqa.selenium.support.PageFactory.proxyFields(PageFactory.java:116)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:104)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:91)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:78)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:64)
at lenovo.tests.step.NCBLoginStep.<init>(NCBLoginStep.java:20)

Не могли бы вы посоветовать мне, как правильно переопределить методы WebElement и вместо этого использовать мой метод .isDispalyed()? Я хотел бы продолжить использовать аннотацию @FindBy.


person BohdanN    schedule 27.04.2015    source источник
comment
Вы переопределили все методы WebElement?   -  person LittlePanda    schedule 27.04.2015
comment
Конечно, я получаю эту ошибку после переопределения всех методов.   -  person BohdanN    schedule 27.04.2015


Ответы (1)


Этот ответ здесь описывает то, что вы хотите. Он задокументировал способ создания собственной PageFactory в этом блоге, который это путь. По крайней мере, мы (на работе) именно так и делаем. Наша цель состоит в том, чтобы иметь автоматический повтор для каждого метода WebElement вместо неприятных StaleElementReferenceExceptions и автоматически прокручивать элемент в поле зрения, если Chrome не может обработать его самостоятельно. ;-)

person Carsten    schedule 20.07.2015