在 C# 中等待 Selenium Web 驱动程序中的标签标签文本

Waiting for label tag text in Selenium web driver in C#

问候 Stack Overflow 社区,

我有一个简短的问题,回答后将帮助任何其他希望使用 Selenium 和 C# 的人等待文本出现在网页上,该文本不可点击 link 但已显示在 label 标签内。

我有以下示例代码,

<div class="class1" style="style7">
<label id="statusBar" class="class2">Not Ready</label>
</div>

我尝试使用 Selenium 和 C# 插入等待,直到出现预期条件,该条件将暂停代码,然后在满足条件后恢复。

我可以找到标签并在 XPath 找到后执行操作...

wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='statusBar']")));

但是,当我尝试等待 "Not Ready" 文本在该标签中可见时,C# 脚本此时卡住了,无法在标签中找到文本。

这是我根据几篇未解决此问题的堆栈溢出文章尝试的方法。

wait.Until(ExpectedConditions.TextToBePresentInElementLocated(By.Id("statusBar"), "Not Ready"));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='statusBar']//label[contains(text(), 'Not Ready')]")));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='statusBar'][contains(text(), 'Not Ready')]")));

如有任何帮助,我们将不胜感激。

看来你很接近。你需要诱导WebDriverWait,你可以使用以下任一解决方案:

  • 使用TextToBePresentInElementLocated():

    • CssSelector:

      wait.Until(ExpectedConditions.TextToBePresentInElementLocated(By.CssSelector("label.class2#statusBar"), "Not Ready"));
      
    • XPath:

      wait.Until(ExpectedConditions.TextToBePresentInElementLocated(By.XPath("//label[@class='class2' and @id='statusBar']"), "Not Ready"));