OpenQA.Selenium.NoSuchElementException 未被 c# selenium 中的用户代码处理

OpenQA.Selenium.NoSuchElementException was unhandled by user code in c# selenium

我想用显式 wait.But 等待我的硒程序最多 30 秒 (GlobalVar.timetomaximumwait),当它无法找到它暂停在 wait.until(... ) 行并显示 OpenQA.Selenium.NoSuchElementException 未被用户代码处理 如果我按继续或按 F10,它会再次尝试查找该元素并继续为我定义的时间垃圾邮件。 无法理解为什么程序暂停并且错误消息出现在两者之间。 我正在使用 VS2010,c#,selenium 2.45,即 9

非常感谢任何形式的帮助。

 public string SetValueInTextBox(string InputData, string xPathVal)
        {
            try
            {
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(GlobalVar.timetomaximumwait));
                 wait.Until<IWebElement>((d) =>
                {
                    return d.FindElement(By.XPath(xPathVal));
                });
                 IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal));

               // IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal));


                elementHighlight(TargetElement);
                TargetElement.Clear();
                TargetElement.SendKeys(InputData);

                //driver.FindElement(By.XPath(xPathVal)).SendKeys(InputData);


                return "Pass";
            }
            catch (Exception e)
            {
                return "Fail";
            }
            finally
            {
               // string SSName = "temp.jpg";
                TakeScreenshot("SetValueInTextBox");

            }
        }

问题出在这里:

wait.Until<IWebElement>((d) =>
{
    return d.FindElement(By.XPath(xPathVal));
});

您需要处理未找到元素时抛出的异常。

wait.Until<IWebElement>((d) =>
{
    try
    {
        return d.FindElement(By.XPath(xPathVal));
    }
    catch(NoSuchElementException e)
    {
        return null;
    }
});

我建议在 catch 块中添加一些日志记录,这样您就知道每次驱动程序找不到元素时。