1. 概述
在这个教程中,我们将探讨Selenium常见的错误:“必须通过webdriver.chrome.driver系统属性设置驱动执行文件的路径”。这个错误会阻止Selenium启动浏览器。这是由于配置不完整造成的。我们将学习如何通过正确设置来解决这个问题,无论是手动还是自动。
2. 错误原因
在使用Selenium之前,我们需要进行一些设置,如设置WebDriver的路径。如果我们没有配置WebDriver的路径,就无法运行它来控制浏览器,从而导致java.lang.IllegalStateException
异常。
让我们看看导致此错误的不完整设置:
WebDriver driver = new ChromeDriver();
通过这句话,我们想要创建一个新的ChromeDriver实例,但由于没有提供WebDriver的路径,Selenium无法运行它,因此报错:“java.lang.IllegalStateException: 必须通过webdriver.chrome.driver系统属性设置驱动执行文件的路径”。
为了解决这个问题,我们需要进行正确的设置。我们可以手动或使用专用库进行自动化设置。
3. 手动设置
首先,我们需要下载与我们的浏览器匹配的正确WebDriver。根据浏览器版本选择合适的版本至关重要,否则可能会在运行时出现意外问题。
可以从以下网站下载正确的WebDriver:
- Chrome:https://chromedriver.chromium.org/downloads
- Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
- Firefox:https://github.com/mozilla/geckodriver/releases
然后,Selenium需要知道WebDriver的路径,以便它可以运行它来控制浏览器。我们可以使用系统属性设置驱动的路径。每个浏览器的属性键不同:
- Chrome:webdriver.chrome.driver
- Firefox:webdriver.gecko.driver
- Edge:webdriver.edge.driver
以Chrome为例,看下手动设置过程:我们将下载的WebDriver路径设置好,然后创建一个ChromeDriver实例:
WebDriver driver;
void setupChromeDriver() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
driver = new ChromeDriver();
options();
}
void options() {
driver.manage().window().maximize();
}
路径可以是相对的,也可以是绝对的。此外,我们还可以设置其他设置,如上例中最大化浏览器窗口。
其他浏览器的设置也非常相似。如下面所示,我们只需替换驱动设置方法并设置相应驱动的路径:
void setupGeckoDriver() {
System.setProperty("webdriver.gecko.driver", "src/test/resources/geckodriver.exe");
driver = new FirefoxDriver();
options();
}
void setupEdgeDriver() {
System.setProperty("webdriver.edge.driver", "src/test/resources/msedgedriver.exe");
driver = new EdgeDriver();
options();
}
为了验证设置,我们可以在https://www.baeldung.com上进行一个小测试:
String TITLE_XPATH = "//a[@href='/']";
String URL = "https://www.baeldung.com";
@Test
void givenChromeDriver_whenNavigateToBaeldung_thenFindTitleIsSuccessful() {
setupChromeDriver();
driver.get(URL);
final WebElement title = driver.findElement(By.xpath(TITLE_XPATH));
assertEquals("Baeldung", title.getAttribute("title"));
}
如果设置仍然无效,我们需要确保WebDriver的路径正确。
4. 自动化设置
手动设置可能有些繁琐,因为我们需要手动下载特定的WebDriver。而且,如果安装的浏览器启用了自动更新,我们可能需要定期替换WebDriver以获取最新版本。
为了简化这一过程,我们可以使用WebDriverManager库,每次运行时它都会为我们处理这些任务。
首先,我们需要将依赖项添加到我们的pom.xml:
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.0</version>
</dependency>
使用库进行设置非常简单,只需要一行代码:
WebDriver driver;
void setupChromeDriver() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
options();
}
void options() {
driver.manage().window().maximize();
}
在设置过程中,WebDriverManager会检查已安装浏览器的版本,并自动下载正确的WebDriver版本。它设置系统属性,然后运行浏览器。
适应其他浏览器的设置也很容易:
void setupGeckoDriver() {
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
options();
}
void setupEdgeDriver() {
WebDriverManager.edgedriver().setup();
driver = new EdgeDriver();
options();
}
再次,我们可以通过在https://www.baeldung.com上进行一个小测试来验证这个设置:
String TITLE_XPATH = "//a[@href='/']";
String URL = "https://www.baeldung.com";
@Test
void givenChromeDriver_whenNavigateToBaeldung_thenFindTitleIsSuccessful() {
setupChromeDriver();
driver.get(URL);
final WebElement title = driver.findElement(By.xpath(TITLE_XPATH));
assertEquals("Baeldung", title.getAttribute("title"));
}
5. 总结
在这篇文章中,我们了解了导致Selenium错误“必须通过webdriver.chrome.driver系统属性设置驱动执行文件的路径”的原因,并学习了如何解决这个问题。
我们可以手动设置,但维护工作较多。使用WebDriverManager库进行自动化设置可以减少在Selenium工作中所需的维护工作。
所有示例的实现代码可在GitHub上找到:https://github.com/eugenp/tutorials/tree/master/testing-modules/selenium-2。