我知道我可以通过这样做等待存在的元素:
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
var element = wait.Until(d => d.FindElement(By.Id("foo-status")));
如果它在5秒内不存在,则element
为空。
如何让Selenium等待元素具有某个文本值?
(我已回答了我自己的问题,但会热衷于任何更好的答案或改进。)
答案 0 :(得分:1)
在ExpectedConditions的帮助下,您可以使用TextToBePresentInElement的方法实现一个更简单的解决方案,让您的用例等待元素拥有某个文本,如下所示:
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
var expectedText = "good";
var element = wait.Until(ExpectedConditions.TextToBePresentInElement(By.Id("foo-status"), expectedText));
答案 1 :(得分:0)
诀窍是使用一个过滤方法,如果文本不匹配则返回null。
public static IWebElement ElementTextFilter(IWebElement webElement, string text) {
if (webElement == null)
return null;
return webElement.Text.Equals(text, StringComparison.OrdinalIgnoreCase)
? webElement : null;
}
// ...
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
var expectedText = "good";
var element = wait.Until(d =>
ElementTextFilter(d.FindElement(By.Id("foo-status")), expectedText)
);
可以轻松将其转换为更清洁的扩展方法。
public static class WebElementExtensions {
public static IWebElement WithText(this IWebElement webElement, string text) {
if (webElement == null)
return null;
return webElement.Text.Equals(text, StringComparison.OrdinalIgnoreCase)
? webElement : null;
}
// ...
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
var expectedText = "good";
var element = wait.Until(d => d.FindElement(By.Id("foo-status")).WithText(expectedText));