显式等待PageFactory @Findby

时间:2015-04-21 14:23:32

标签: java selenium-webdriver wait factory

我在Java中使用css定位器进行了这个wait命令,然后单击它。

  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;
}

2 个答案:

答案 0 :(得分:1)

通过更改为VisibilityOf来解决:

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

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

答案 1 :(得分:0)

它只取决于你的lp.btnSignIn()方法返回的内容。

引用selenium文档here

public static ExpectedCondition<WebElement> presenceOfElementLocated(By locator)

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

<强>参数:

locator - 用于查找元素

<强>返回:     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()`;