有没有一种方法可以扩展Selenium Page模型,并将动态等待实现为另一个注释。 ..

我已经实现了wait4element(),我只想将其添加为另一个注释,类似于@FindBy。

我怎么做 ?

最佳答案

准金属预期条件库包含类似的解决方案。

您可以使用@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类。

该库是准金属的一部分:https://github.com/Rafal-Laskowski/Metalloid-Core
但是,就像我所描述的一样,它也可以独立使用。 Wiki:https://github.com/Rafal-Laskowski/Metalloid-Expected-Conditions/wiki

10-07 17:30