修復 Selenium WebDriver 可執行路徑錯誤
一、概述
在本教程中,我們將看看常見的 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 時的維護。
與往常一樣,所有這些示例的實現都可以在 GitHub 上找到。