C#system.stackoverflow异常

时间:2018-04-19 20:09:05

标签: c# selenium selenium-webdriver webdriver stack-overflow

我在if / else语句中遇到了stackoverflow异常..

代码示例:

if (driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Hello World')]")).Count != 0)
{
    Console.WriteLine("Hello World");
}
else
{
    RunOtherFunction();
}

突出显示的错误代码是 -

if (driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Hello World')]")).Count != 0)

很明显,由于没有找到指定的元素而引发异常,但是我用else语句覆盖了它?

所以我不明白为什么它会抛出一个异常因为如果找不到Element那么它应该执行“RunOtherFunction();”而不是抛出异常?

2 个答案:

答案 0 :(得分:0)

突出显示的行是正确的。它在第一行抛出异常,因为你没有try catch块,所以它不会进入else。

答案 1 :(得分:0)

基于Java观点的答案:

我使用类似的用例做了一个小测试:

  • 我打开了网址https://www.google.com/
  • 使用findElements()id循环的页面上查找if-else {} Rs_Sele 的元素,并使用!=运算符与<进行比较强> 0
  • 以下是示例代码:

    WebDriver driver = new ChromeDriver(options);
    driver.get("https://www.google.com/");
    if(driver.findElements(By.id("Rs_Sele")).size() !=0)
        System.out.println("Atleast one element was found");
    else
        System.out.println("No element was found");
    
  • 控制台输出:

    No element was found
    

分析

  • findElements() Java Docs 提到此方法使用提供的机制查找当前上下文中的所有元素。如果找到的集合中有超过0个项目,则此方法将返回,或者如果达到超时,则返回空列表
  • 因此findElements()方法返回空列表,比较后控件转到else {}块并打印未找到任何元素
  • 您的代码块也是如此。
  • driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Hello World')]"))返回空列表
  • 通过!= 运算符进行比较后,执行了 0 else {}块并随后调用RunOtherFunction()函数。

结论

如果您正在观察 stackoverflow异常,那是因为函数 RunOtherFunction();

参考

您可以在 StackOverflowException 中找到类似的讨论: