Библиотека ожидаемых условий 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