【问题标题】:Selenium c# wait.until(expectedconditions)... function fails to find objects/elements on screenSelenium c#wait.until(expectedconditions)...函数无法在屏幕上找到对象/元素
【发布时间】:2016-08-05 14:00:35
【问题描述】:

我不熟悉使用 selenium Webdriver 和写作 c#。我在我的脚本中使用了很多 thread.sleep() 命令来确保 Selenium 不会尝试点击太快。经过大量研究,我发现这是不受欢迎的,并且有“更好”的方法可以做到这一点,所以我开始使用:-

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));

Wait 在另一个类中定义为:-

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));

我只能让它运行脚本的 2/10 次而没有得到:

没有这样的元素异常:找不到元素......

现在我已经停止使用thread.sleep,我有很多关于这个问题的例子。经过大量研究后,我总是发现这是建议的方式,但它似乎完全不可靠。我错过了什么吗?该元素在 2 秒后始终存在,并且在 10 秒过去之前发生错误。我已经阅读了至少 10 篇听起来相似的其他帖子,但没有一个有有效的解决方案……除了Thread.Sleep(5000)

【问题讨论】:

  • 如果你使用WebDriverWait,你怎么能得到No such element exception而它抛出TimeoutException??
  • @SaurabhGaur Until() 如果不在忽略列表中,则抛出异常
  • 你也在使用隐式等待吗?如果同时使用隐式等待和显式等待,可能会得到意想不到的结果。
  • @JeffC - 首先,感谢您提供帮助。我没有同时使用其他类型的等待。我已经尝试过使用它,但这是目前我正在使用的唯一“等待”过程。

标签: c# selenium-webdriver wait


【解决方案1】:

创建后尝试将 NoSuchElementException 类型添加到服务员的 IgnoreExceptionTypes 中。

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));

一般来说,如果服务员在您指示的超时到期之前返回,那是因为发生了当前未被忽略的异常。

WebDriverWait 类派生自 DefaultWait 类。这两个你都可以在 github 上查看,我发现这对理解如何使用它很有帮助。

【讨论】:

  • 你的答案大部分是正确的,除了异常类型应该是NoSuchElementException
  • @kovpaev-alexey 已更新。谢谢!
  • @digitalnoiz 谢谢你。我将尝试将其添加到我的忽略中,看看是否有助于解决问题。当我这样做时,如果它奏效了,我就不会在这里。无论哪种方式,谢谢您的建议。
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2014-07-13
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多