Расширение аннотации PageFactory для поддержки wait4element (By)? - PullRequest
0 голосов
/ 20 апреля 2020

Есть ли способ дополнить модель Selenium Page динамическими c ожиданиями, реализованными в качестве другой аннотации. ..

У меня реализован wait4element (), я просто хочу добавить его как еще одну аннотацию, похожую на @FindBy.

Как мне это сделать?

1 Ответ

1 голос
/ 28 апреля 2020

Библиотека ожидаемых условий Metalloid содержит аналогичное решение.

Вы можете пометить элемент с помощью @ExpectedCondition, указав время и условие следующим образом:

@ExpectedCondition(timeout = 10, condition = Visibility.class)
@FindBy(id = "login-button")
private WebElement loginButton;

В конструкторе вы должны Вызовите метод, отвечающий за оценку элементов:

public PageObject() {
    PageFactory.initElements(driver, this);
    ConditionEvaluator.evaluate(driver, this);
}

ConditionEvaluator собирает все элементы, отмеченные @ExpectedCondition, создает внутренний экземпляр WebDriverWait и оценивает условие, предоставленное в @ExpectedCondition. Это делает это немедленно. Нет отложенной реализации .

Металлоид содержит встроенный Visibility.class, который выглядит следующим образом:

public class Visibility extends Condition {

    public Visibility(WebDriver driver, WebElement element) {
        super(driver, element);
    }

    @Override
    public ExpectedCondition<?> getExpectedCondition() {
        return ExpectedConditions.visibilityOf(element);
    }
}

Конструктор вызывается с помощью Java Reflection API и вам не нужно об этом беспокоиться.

Метод getExpectedCondition сообщает Metalloid, как оценивать условие.

Если вы хотите создать свои собственные условия, просто расширьте Condition класс, как Visibility.class делает.

Эта библиотека является частью Metalloid: https://github.com/Rafal-Laskowski/Metalloid-Core Но может использоваться так же автономно, как я описал. Вики: https://github.com/Rafal-Laskowski/Metalloid-Expected-Conditions/wiki

...