【问题标题】:Unable to catch NoSuchElementException in user code无法在用户代码中捕获 NoSuchElementException
【发布时间】:2020-09-11 14:09:08
【问题描述】:

即使我的代码包含在 try 块中,我仍然收到未处理的异常, "在 WebDriver.dll 中发生 OpenQA.Selenium.NoSuchElementException 类型的异常,但未在用户代码中处理。

代码如下:

        try
        {

            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));

            switch (findBy)
            {
                case SeleniumFindBy.ById:
                    itemtext = wait.Until(d => d.FindElement(By.Id(elementId)).Text);
                    break;

                case SeleniumFindBy.ByName:
                    itemtext = wait.Until(d => d.FindElement(By.Name(elementId)).Text);
                    break;

                case SeleniumFindBy.ByLinkText:
                    itemtext = wait.Until(d => d.FindElement(By.LinkText(elementId)).Text);
                    break;

                case SeleniumFindBy.ByPartialLinkText:
                    itemtext = wait.Until(d => d.FindElement(By.PartialLinkText(elementId)).Text);
                    break;

                case SeleniumFindBy.ByXPath:
                    itemtext = wait.Until(d => d.FindElement(By.XPath(elementId)).Text);
                    break;

                case SeleniumFindBy.CssSelector:
                    itemtext = wait.Until(d => d.FindElement(By.CssSelector(elementId)).Text);
                    break;
            }
        }
        catch (OpenQA.Selenium.NoSuchElementException ex)
        {
            LastError = elementId + "," + ex.Message;
        }
        catch (Exception ex)
        {
            LastError = elementId + "," + ex.Message;
        }

【问题讨论】:

    标签: c# selenium findelement


    【解决方案1】:

    虽然你使用 lambda 表达式为:

    itemtext = wait.Until(d => d.FindElement(By.Id(elementId)).Text);
    

    lambda 表达式仍然依赖FindElement() 方法。


    查找元素方法

    ISearchContext.FindElement 方法使用给定的方法找到第一个IWebElement

    语法:

    IWebElement FindElement(
        By by
    )
    

    返回值

    Type: IWebElement
    The first matching IWebElement on the current context.
    

    例外:NoSuchElementException


    这个用例

    由于内部 FindElement Method() 失败,因此您会看到 NoSuchElementException

    解决方案

    作为一种解决方案,您可以处理在 try-catch{} 块中找不到元素时引发的异常,如下所示:

    itemtext = wait.Until<IWebElement>((d) =>
    {
        try
        {
            return d.FindElement(By.Id(elementId).Text);
        }
        catch(NoSuchElementException e)
        {
            return null;
        }
    });
    break;
    

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多