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

OpenQA.Selenium.NoSuchElementException未经c#Selenium中的用户代码处理,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我想用显式等待来等待我的selenium程序最长30秒(GlobalVar.timetomaximumwait)。但当它无法定位元素时,它会暂停在wait.until(…)行并显示OpenQA.selenium.NoSuchElementException,用户代码未处理该异常 如果我按continue或F10,它将再次尝试查找元素,并在我定义的时间内继续相同的操作。 无法理解程序为何暂停,错误消息介于两者之间。 我使用的是VS2010、c#、selenium 2.45、Ie 9 非常感谢您的任

我想用显式等待来等待我的selenium程序最长30秒(GlobalVar.timetomaximumwait)。但当它无法定位元素时,它会暂停在wait.until(…)行并显示OpenQA.selenium.NoSuchElementException,用户代码未处理该异常 如果我按continue或F10,它将再次尝试查找元素,并在我定义的时间内继续相同的操作。 无法理解程序为何暂停,错误消息介于两者之间。 我使用的是VS2010、c#、selenium 2.45、Ie 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");

            }
        }
public string SetValueInTextBox(string InputData,string xPathVal)
{
尝试
{
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(GlobalVar.timetomaximumwait));
等待。直到((d)=>
{
返回d.FindElement(By.XPath(xPathVal));
});
IWebElement TargetElement=driver.FindElement(By.XPath(xPathVal));
//IWebElement TargetElement=driver.FindElement(By.XPath(xPathVal));
元素高亮显示(TargetElement);
TargetElement.Clear();
TargetElement.SendKeys(输入数据);
//driver.FindElement(By.XPath(xPathVal)).SendKeys(InputData);
返回“通行证”;
}
捕获(例外e)
{
返回“失败”;
}
最后
{
//字符串SSName=“temp.jpg”;
截图(“设置值输入框”);
}
}
问题在于:

wait.Until<IWebElement>((d) =>
{
    return d.FindElement(By.XPath(xPathVal));
});
等待直到((d)=>
{
返回d.FindElement(By.XPath(xPathVal));
});
您需要处理未找到元素时引发的异常

wait.Until<IWebElement>((d) =>
{
    try
    {
        return d.FindElement(By.XPath(xPathVal));
    }
    catch(NoSuchElementException e)
    {
        return null;
    }
});
等待直到((d)=>
{
尝试
{
返回d.FindElement(By.XPath(xPathVal));
}
捕获(无接触元素例外e)
{
返回null;
}
});

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

感谢@aholt为您提供的时间和支持。让我在emulator中检查一下。