显式等待 PageFactory @Findby

Explicit Wait PageFactory @Findby

我在 Java 中有一个带有 css 定位器的等待命令,然后单击它。

  new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button.md-primary.md-raised.md-button.md-default-theme"))).click();

现在我将该定位器变成了一个 pagefactory 对象,它是 lp.btnSignIn() 发出此显式等待然后单击的正确方法是什么?我还能使用预期条件吗?

这是我的 PageFactory 代码:

@FindBy(css="button.md-primary.md-raised.md-button.md-default-theme")
WebElement btnSignIn;

public WebElement btnSignIn() {
    return btnSignIn;
}

这完全取决于您的 lp.btnSignIn() 方法返回的内容。

引用自 selenium 文档 here

public static ExpectedCondition<WebElement> presenceOfElementLocated(By locator)

期望检查元素是否存在于页面的 DOM 上。这并不一定意味着该元素是可见的。

参数:

locator - 用于查找元素

Returns: WebElement 位于

因此,只有当它返回 css 定位器代替 WebElement

时,您才可以使用 lp.btnSignIn()

因此您的 btnSignIn() 方法应该是这样的:

public static Locater btnSignIn() {
    return By.cssSelector("button.md-primary.md-raised.md-button.md-default-theme");
}

现在您可以使用如下预期条件:

new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(lp.btnSignIn())).click()`;

通过更改为 VisibilityOf 解决:

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOf(lp.btnSignIn())).click();

小心,因为这会检查元素是否可见,它可能不可见,但它仍然在 DOM。