在Java,Selenium中,您可以等到webelement
中的文字出现(带有WebDriverWait
):
wait.until(ExpectedConditions.textToBePresentInElement(webelement, expectedMessage));
但是,如果你不希望只有expectedMessage在元素中存在(= expectedMessage是webelement.getText()的子字符串),那么你做什么,但要 webelement的确切文本(= expectedMessage与webelement.getText()的字符串相同)?
Selenium确实提供了这个功能:
wait.until(ExpectedConditions.textToBe(locator, expectedMessage));
但是当您在页面类中使用@FindBy定位器收集了webelements时,再次让定位器可以直接访问测试类是很尴尬的。
如何解决这个问题?
答案 0 :(得分:0)
您可以创建自己的预期条件:
public static ExpectedCondition<Boolean> waitForTextInElementEquals(WebElement elm, String text) {
return new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
try {
String elementText = elm.getText();
return elementText.equals(text);
} catch (StaleElementReferenceException var3) {
return null;
}
}
public String toString() {
return String.format("text ('%s') to be present in element %s", text, elm);
}
};
}
您可以像WebDriverWait中的ExpectedConditions一样使用它:
WebDriverWait wait = new WebDriverWait(WebDriver, 30, 1000);
wait.until(waitForTextInElementEquals(foo, bar));
答案 1 :(得分:0)
还有另一个更简单的解决方案:
WebDriverWait wait = new WebDriverWait(webdriver, waitForElementTimeout).until(ExpectedConditions.attributeToBe(webelement, "text", expected));
用硒3.8.1测试。