Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何等待WebElement具有特定的文本值(Selenium C#)_C#_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

如何等待WebElement具有特定的文本值(Selenium C#)

如何等待WebElement具有特定的文本值(Selenium C#),c#,selenium,selenium-webdriver,webdriver,C#,Selenium,Selenium Webdriver,Webdriver,我知道我可以通过这样做来等待元素的存在: var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5)); var element = wait.Until(d => d.FindElement(By.Id("foo-status"))); 如果它在5秒内不存在,元素为空 如何让Selenium等待元素具有特定的文本值 (我已经回答了我自己的问题,但希望有更好的答案或改进。)诀窍是使用一个过滤方法,如果文本不匹配,它将返回nul

我知道我可以通过这样做来等待元素的存在:

var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(5));
var element = wait.Until(d => d.FindElement(By.Id("foo-status")));
如果它在5秒内不存在,
元素
为空

如何让Selenium等待元素具有特定的文本值


(我已经回答了我自己的问题,但希望有更好的答案或改进。)

诀窍是使用一个过滤方法,如果文本不匹配,它将返回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));

您的用例等待元素具有特定文本的更简单解决方案可以在的帮助下结合以下方法实现:

wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
var expectedText = "good";
var element = wait.Until(ExpectedConditions.TextToBePresentInElement(By.Id("foo-status"), expectedText));