一、概述
在本教程中,我们将看看常见的Selenium 错误:“ The path to the driver executable must be set by the webdriver.chrome.driver system property
”。此错误会阻止Selenium 启动浏览器。它是由不完整的配置引起的。我们将学习如何通过手动或自动进行正确设置来解决此问题。
2. 错误原因
Selenium 需要一些设置步骤才能使用它,例如设置WebDriver 的路径。如果我们不配置WebDriver 的路径,我们就不能运行它来控制浏览器,我们会得到一个java.lang.IllegalStateException
。
让我们看一下导致此错误的不完整设置:
WebDriver driver = new ChromeDriver();
使用该语句,我们想创建一个新的ChromeDriver
实例,但由于我们没有提供WebDriver
的路径,Selenium 无法运行它并且它失败并出现错误“ java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property
“。
要解决此问题,我们需要执行正确的设置。我们可以手动或使用专用库自动执行此操作。
3. 手动设置
首先,我们需要为我们的浏览器下载正确的WebDriver。根据我们的浏览器下载正确的版本至关重要,否则在运行时可能会出现无法预料的问题。
可以从以下站点下载正确的WebDriver:
铬:https ://chromedriver.chromium.org/downloads
边缘:https ://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
火狐:https ://github.com/mozilla/geckodriver/releases
Selenium 然后需要下载驱动程序的路径,以便它可以运行它来控制浏览器。我们可以使用系统属性设置驱动程序的路径。每个浏览器的属性键不同:
铬:
webdriver.chrome.driver
火狐:
webdriver.gecko.driver
边缘:
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 错误“ The path to the driver executable must be set by the webdriver.chrome.driver system property
”的原因以及我们如何修复它。
我们可以进行手动设置,但这会导致一些维护工作。使用WebDriverManager 库的自动设置减少了使用Selenium 时的维护。
0 评论