我在 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 {}
循环中查找页面上id
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 文档提到,此方法使用提供的机制查找当前上下文中的所有元素。此方法将在找到的集合中有超过 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 或查看它发生的位置