VS Code无法运行Selenium测试报IllegalStateException异常
问题场景
在VS Code环境运行Java Selenium自动化测试用例,已完成Selenium jar包导入、匹配版本ChromeDriver下载的前置准备,运行测试代码时触发异常。
测试代码如下:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class App { public static void main(String[] args) throws Exception { System.out.println("hi"); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com"); driver.quit(); } }
报错详情
运行后抛出IllegalStateException,提示需通过webdriver.chrome.driver系统属性指定ChromeDriver可执行文件路径,完整报错日志:
PS D:\software testing task 2> & 'C:\Program Files\Java\jdk-17.0.1\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '@C:\Users\mohamed\AppData\Local\Temp\cp_apvu20bu2lqgd550a094p3mwf.argfile' 'App' zzzzzzzzzz Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from https://chromedriver.storage.googleapis.com/index.html at org.openqa.selenium.internal.Require$StateChecker.nonNull(Require.java:311) at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:135) at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:38) at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:231) at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:437) at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:127) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:48) at App.main(App.java:7)
报错根因
仅把ChromeDriver下载到本地不够,Selenium运行时不会全盘扫描检索驱动文件,需要显式告知程序驱动的存放位置,或者把驱动放到系统默认会检索的路径下,否则程序找不到驱动就会抛出该异常。
解决方法
- 代码内显式指定驱动路径(最快生效,无需修改系统配置)
在初始化ChromeDriver实例前,添加一行系统属性配置,将值替换为本地chromedriver.exe的实际完整存放路径即可。修改后的代码示例:
*注意:Windows系统下写路径时,路径中的反斜杠import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class App { public static void main(String[] args) throws Exception { System.out.println("hi"); // 替换为自己的chromedriver.exe实际存放路径 System.setProperty("webdriver.chrome.driver", "D:\\test\\drivers\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com"); driver.quit(); } }\需要双写做转义,否则Java会识别为转义字符导致路径错误。 - 将驱动放到系统默认检索路径
可以直接把下载好的chromedriver.exe放到当前使用的JDK的bin目录下(从运行日志看当前JDK路径为C:\Program Files\Java\jdk-17.0.1\bin\),也可以把ChromeDriver所在的文件夹路径添加到系统环境变量Path中,配置完成后重启VS Code,无需添加setProperty代码即可正常运行。 - 升级Selenium版本到4.6及以上
4.6及以上版本的Selenium内置了Selenium Manager组件,会自动检测本地Chrome浏览器版本、自动下载匹配的ChromeDriver、自动完成路径配置,不需要手动下载驱动也不需要手动编写路径配置,直接初始化ChromeDriver即可正常运行。
内容的提问来源于stack exchange,提问作者bondo2
相关产品推荐
相关产品推荐

