【问题标题】:Ignoring exceptions when using c# selenium webdriverWait wait.untill() function使用 c# selenium webdriverWait wait.untill() 函数时忽略异常
【发布时间】:2017-08-23 12:12:46
【问题描述】:

为了检查元素是否存在和 clickble,我正在尝试编写一个布尔方法,该方法将等待使用 C# selenium 的 webDriverWait 启用和显示元素,如下所示:

webDriverWait 等待 = 新 webDriverWait(driver, timeSpan.fromSeconds(60));

Wait.untill(d => webElement.enabled() && webElement.displayed());

如果上述情况没有发生,我希望方法返回'false'。问题是我抛出异常。 如何忽略 noSuchElementException 和 timeOutException 等异常,以防它们被抛出? 我曾尝试使用 try catch 块,但没有帮助并引发异常。

【问题讨论】:

  • 您能否提供一些更具体的信息: 1. 您希望元素可见或可点击? 2. 您如何衡量元素可见/可点击所需的最短和最长时间是多少?
  • 嗨,(1)我希望元素可见且可点击。 (2) 我想等到 60 秒。
  • 我不知道确切的最小和最大时间,因为我想为特定元素实现上述代码。我需要编写一个不能用于特定元素的方法。
  • 你能准确地更新它抛出的异常类型吗?
  • OpenQA.Selenium.NoSuchElementException 和 'OpenQA.Selenium.WebDriverTimeoutException' 在 WebDriver.Support.dll 中发生

标签: c# .net selenium selenium-webdriver visual-studio-2013


【解决方案1】:

WebDriverWait 实现 DefaultWait 类,该类包含 public void IgnoreExceptionTypes(params Type[] exceptionTypes) 方法。

您可以使用此方法定义在等待元素在单击之前启用时要忽略的所有异常类型。

例如:

WebDriverWait wdw = new WebDriverWait(driver, TimeSpan.FromSeconds(120));
wdw.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(ElementNotVisibleException));

在前面的代码中等待会忽略 NoSuchElementException 和 ElementNotVisibleException 异常

【讨论】:

  • 不。我正在使用这个确切的代码,但它仍然抛出“没有这样的元素,无法找到元素...... [等等]......” Grrrr.....
  • 这里有同样的问题,因此我在这个线程上。我可以在调试时使用 IgnoreExceptionTypes 语句清楚地看到等待实例,但它实际上并没有忽略它们。
【解决方案2】:

如果您等待元素可点击,它也会显示并启用。你可以简单地做

public bool IsElementClickable(By locator, int timeOut)
{
    try
    {
        new WebDriverWait(Driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementToBeClickable(locator));

        return true;
    }
    catch (WebDriverTimeoutException)
    {
        return false;
    }
}

它会等待 60 秒并在找到元素后单击该元素。如果元素在超时后没有找到、不能点击等,它仍然可能会抛出异常。

编辑: 根据 OP 评论将其封装在一个函数中。

【讨论】:

  • 嗨,wait.Until(ExpectedConditions.ElementToBeClickable() 方法存在于Java中,而不是c#中。
  • 不正确。我已经启动了 VS 并输入并格式化了该代码,它工作得很好,更不用说我正在我正在处理的项目中使用它。
  • 谢谢,我试试。例外情况如何?有什么办法可以忽略它们?
  • 你可以直接传入IWebElement。您应该阅读文档,以便了解如何自己做这些事情。这很简单。 seleniumhq.github.io/selenium/docs/api/dotnet/html/…
  • 如果您发现这个(或任何)答案有帮助,请点赞。如果这回答了您的问题,请将其标记为已接受的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2011-01-12
  • 2016-11-01
  • 2019-11-07
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多