Selenium 4.18.1中selenium-manager.exe被拦截,如何改用WebDriverManager?
- 环境信息:
- Eclipse搭建Selenium Maven项目,使用Selenium 4.18.1版本
- Java版本11,Chrome及ChromeDriver已自动升级至122版本,无法降级
- pom.xml配置(注:原WebDriverManager依赖groupId存在拼写错误,正确应为
io.github.bonigarcia):<!-- Selenium核心依赖 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.18.1</version> </dependency> <!-- WebDriverManager依赖 --> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency>
- 报错内容:
Exception in thread "main" org.openqa.selenium.remote.NoSuchDriverException: Unable to obtain: Capabilities {browserName: Chrome, goog:chromeOptions: {args: [], extensions: []}}, error Failed to run command: [--browser, chrome, --language-binding, java, --output, json]
Build info: version: '4.18.1', revision: 'b1d3319b48'
System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.22'
Driver info: driver.version: ChromeDriver - 核心障碍:selenium-manager.exe因组织安全策略拦截(存在未修复Bug),更换程序位置、降级Selenium均无效,且必须保留当前Selenium版本以兼容Chrome 122
- 现有测试代码:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class testRun { public static void main(String[] args) { Webdriver driver = new ChromeDriver(); driver.get("https://www.google.com"); driver.getTitle(); WebElement authenticate = driver.findElement(By.id("login-submit")); authenticate.click(); System.out.println("test has ended"); driver.quit(); } } - 疑问:能否绕过selenium-manager.exe,改用WebDriverManager解决驱动管理问题?
完全可以通过以下步骤绕过Selenium自带的Selenium Manager,改用WebDriverManager实现驱动管理:
禁用Selenium自带管理器
通过系统属性关闭Selenium Manager的自动运行,避免触发被拦截的exe程序:System.setProperty("selenium-manager.enabled", "false");也可通过Eclipse的JVM参数添加
-Dselenium-manager.enabled=false实现全局禁用。修改测试代码,集成WebDriverManager
修正原代码的拼写错误(Webdriver改为WebDriver),添加WebDriverManager的驱动初始化逻辑,同时调整测试步骤(Google首页无login-submit元素,替换为合理操作):import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import io.github.bonigarcia.wdm.WebDriverManager; public class testRun { public static void main(String[] args) { // 禁用Selenium自带管理器 System.setProperty("selenium-manager.enabled", "false"); // 用WebDriverManager自动匹配并下载ChromeDriver WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); try { driver.get("https://www.google.com"); System.out.println("页面标题:" + driver.getTitle()); // 示例操作:搜索框输入内容(可根据需求修改) // WebElement searchBox = driver.findElement(By.name("q")); // searchBox.sendKeys("Selenium WebDriverManager"); } finally { driver.quit(); System.out.println("测试已结束"); } } }验证效果
运行修改后的代码,WebDriverManager会自动识别Chrome版本,下载匹配的ChromeDriver并配置环境,全程无需依赖selenium-manager.exe,即可正常启动Chrome执行测试。
内容的提问来源于stack exchange,提问作者MaughaS

