有没有办法扩展Selenium页面模型,将动态等待作为另一个注解来实现。..
我已经实现了wait4element(),我只是想把它添加为另一个注解,类似于@FindBy 。
我该怎么做呢?
Metalloid Expected Conditions库包含了一个类似的解决方案。
你可以用 @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
. 它马上就能做到。没有懒惰的实例.
Metalloid包含内置的 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.comRafal-LaskowskiMetalloid-Core。但也可以像我描述的那样,独立使用。维基。https:/github.comRafal-LaskowskiMetalloid-Expected-Conditionswiki。