Java 未抛出 Selenium NoSuchElementException

Java Selenium NoSuchElementException not thrown

我对 java 和 selenium 很陌生,有一个关于 NoSuchElementException 的问题:

我得到了以下方法,它应该 return WebElement:

public WebElement getElementByXpath(String xpath, WebDriver driver) {
    try {
        System.out.println("Test");
        return driver.findElement(By.xpath(xpath));
    } catch (NoSuchElementException e) {
        System.out.println("Element not found");
    }

    return null;
}

所以我想要的是,如果没有找到元素,那么只会打印“找不到元素”。但我得到的不是这个,而是完整的错误消息,但没有“找不到元素”:

Test
2022-03-07 16:22:33.159 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//select[@id='sr_creg_country123']/option[contains(text(), 'Deutschland')]"}
(Session info: chrome=98.0.4758.80)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
.
. 
.

据我了解,不会抛出异常,因为从未打印消息“找不到元素”? 但是有人能解释一下为什么以及我必须做什么才能执行 catch 块中的代码吗?

干杯, 迈克尔

Java有两个NoSuchElementException例外,一个在java.util,一个在org.openqa.selenium。为了捕获 WebDriver NoSuchElementException 异常,您需要明确定义捕获 catch (org.openqa.selenium.NoSuchElementException e) 如下:

public WebElement getElementByXpath(String xpath, WebDriver driver) {
    try {
        System.out.println("Test");
        return driver.findElement(By.xpath(xpath));
    } catch (org.openqa.selenium.NoSuchElementException e) {
        System.out.println("Element not found");
    }

    return null;
}

或者您可以导入要使用的异常

import org.openqa.selenium.NoSuchElementException

这样您的方法代码就可以保持不变:

import org.openqa.selenium.NoSuchElementException

public WebElement getElementByXpath(String xpath, WebDriver driver) {
    try {
        System.out.println("Test");
        return driver.findElement(By.xpath(xpath));
    } catch (NoSuchElementException e) {
        System.out.println("Element not found");
    }

    return null;
}