【问题标题】:Selenium fails test finding text but works in debugSelenium 未能通过测试查找文本,但可以在调试中使用
【发布时间】:2020-10-20 22:48:36
【问题描述】:

您好,我正在检查元素中的文本以确保其显示预期的文本..

测试失败,因为它说它返回“”,但是当我在调试中运行它时,它会得到正确的文本。我已经添加了一个 thread.sleep(5000) 并且这修复了测试(我不确定为什么?)并获取显示的文本,但是有没有更好的方法,因为 id 如果可能的话不喜欢使用睡眠。

IWebElement panel = _driver.FindElement(By.Id(currentPanel));
panel.FindElement(By.Id("middlepanel-showbtn")).Click();
displayedBody = panel.FindElement(By.Id("middlepanel-body"));
Thread.Sleep(5000);
displayedBodyText = displayedBody.Text;

【问题讨论】:

  • 我猜你正在调用FindElement ,因为该元素或它的数据被加载。 Click 触发了什么?它是否加载或显示元素?
  • @nilsK 它扩展面板以显示文本

标签: c# selenium selenium-webdriver webdriverwait expected-condition


【解决方案1】:

您必须为ElementIsVisible() 诱导WebDriverWait,您可以使用以下Locator Strategy:

displayedBodyText = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.Id("middlepanel-body"))).Text;

【讨论】:

    【解决方案2】:

    我的猜测是该元素存在,但文本由某个后台进程填充,因此不会立即出现。如果您知道预期的文本应该是什么,您可以添加 WebDriverWait 并等待预期的文本。

    IWebElement panel = _driver.FindElement(By.Id(currentPanel));
    panel.FindElement(By.Id("middlepanel-showbtn")).Click();
    new WebDriverWait(_driver, TimeSpan.FromSeconds(30)).Until(d => panel.FindElement(By.Id("middlepanel-body")).Text == "The desired string");
    // if you get here, the expected text is present
    

    如果您不确定预期的文本是什么,您可以将最后一行换成下面等待文本不为空的行。

    new WebDriverWait(_driver, TimeSpan.FromSeconds(30)).Until(d => panel.FindElement(By.Id("findMe")).Text != "");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-30
      • 2016-04-19
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      相关资源
      最近更新 更多