C# system.stackoverflow exception



我在 if/else 语句上收到堆栈溢出异常。

代码示例:

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(); "而不是抛出异常?

突出显示的行是正确的。它在第一行抛出异常,并且由于您没有 try catch 块,因此它不会进入其他行。

基于Java视角的答案:

我用类似的用例做了一个小测试,其中:

  • 我打开了网址https://www.google.com/
  • 用于findElements()if-else {}循环中查找页面上idRs_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 文档提到,此方法使用提供的机制查找当前上下文中的所有元素。此方法将在找到的集合中有超过 0 个项时立即返回,或者在达到超时时返回空列表
  • 因此,findElements()方法返回一个空列表,比较后控件转到else {}块并打印未找到任何元素
  • 代码块也发生了同样的情况。
  • driver.FindElements(By.XPath("//*[@id='modal']/div/div/div/p[contains(text(), 'Hello World')]"))返回了一个空列表
  • 通过!=运算符与0进行比较后else {}块被执行,随后调用RunOtherFunction()函数。

结论

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

引用

您可以在以下位置找到有关StackOverflowException的类似讨论:

  • C# 捕获堆栈溢出异常
  • C# 无法捕获 StackOverflowException 或查看它发生的位置

最新更新