0

即使我的代码包含在 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;
        }
4

1 回答 1

0

尽管您将 lambda 表达式用作:

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

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


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;
于 2020-09-11T15:04:50.920 回答