【问题标题】:Waiting for label tag text in Selenium web driver in C#在 C# 中的 Selenium Web 驱动程序中等待标签标记文本
【发布时间】:2019-04-05 23:31:24
【问题描述】:

问候 Stack Overflow 社区,

我有一个简短的问题,如果得到回答,它将帮助其他任何希望使用 Selenium 和 C# 的人等待网页上出现不是可点击链接但显示在标签标签内的文本。

我有以下示例代码,

<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']")));

但是,当我尝试等待“未就绪”文本在该标签标记中可见时,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')]")));

任何帮助将不胜感激。

【问题讨论】:

  • 您确定它会忽略等待(使用 TextToBePresent...)吗?文本出现多长时间?
  • 至少是几秒钟,但是这个等待是在满足之前的等待之后发生的。当第一个等待得到满足时,这个第二个等待文本也同时出现。因此,它应该几乎是瞬时的。不过我会尝试插入睡眠,看看是否有什么不同。
  • 通过简短的谷歌搜索我发现了这个:stackoverflow.com/a/49867605/8179099
  • @AndyG 我刚刚用 10 秒的 Thread.Sleep 对其进行了测试,但它仍然没有在标签标签中找到“未就绪”文本,这三种方法中的每一种都可以在标签标签。
  • @MosheSlavin 感谢您的文章,但这不适用于这种情况,因为预期条件不会过时,因为视觉工作室不再显示该警告。

标签: c# selenium xpath css-selectors webdriverwait


【解决方案1】:

看来你已经很接近了。你需要诱导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"));
      

【讨论】:

  • 非常感谢。我非常接近。 :)
  • 当然。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2015-06-12
  • 2021-03-18
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多