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

时间:2015-05-19 20:40:56

标签: c# selenium selenium-webdriver

我想等待我的selenium程序最多30秒(GlobalVar.timetomaximumwait)和显式wait.But什么时候无法找到它在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");

            }
        }

1 个答案:

答案 0 :(得分:2)

问题在于:

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块中添加一些日志记录,这样你就知道每次驱动程序都找不到元素。