我在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;
}
答案 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()`;