显式等待 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。
我在 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。