開始使用 ChromeDriver

本頁說明如何開始使用 ChromeDriver 測試您的網站 桌面版 (Windows/Mac/Linux)。你也可以參閱 開始使用 Android開始使用 ChromeOS

設定

ChromeDriver 是 Selenium WebDriver 用來控制 Chrome 的獨立執行檔。這個版本由 Chromium 團隊在 WebDriver 貢獻者的協助下負責維護。如果你不熟悉 Selenium WebDriver,建議造訪 Selenium 網站

如要針對使用 ChromeDriver 執行測試,請依照下列步驟設定測試:

  • 確認 Chromium/Google Chrome 安裝在可辨識的位置
  • 在這個網站的下載部分,下載您平台適用的 ChromeDriver 二進位檔
  • 協助 WebDriver 尋找已下載的 ChromeDriver 執行檔

下列任何步驟都能派上用場:

  1. 請將 ChromeDriver 位置納入 PATH 環境變數
  2. (僅適用於 Java) 使用 webdriver.chrome.driver 系統屬性指定其位置 (請見下方範例)
  3. (僅限 Python) 在為 webdriver.Chrome 執行個體化時,包含 ChromeDriver 的路徑 (請見下方範例)

測試樣本

Java:

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.junit.Test;
public class GettingStarted {   
@Test   
public void testGoogleSearch() throws InterruptedException {
  // Optional. If not specified, WebDriver searches the PATH for chromedriver.
  // System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
  // WebDriver driver = new ChromeDriver();
  driver.get("http://www.google.com/"); 
  Thread.sleep(5000);  // Let the user actually see something!
  WebElement searchBox = driver.findElement(By.name("q"));
  searchBox.sendKeys("ChromeDriver");
  searchBox.submit(); 
  Thread.sleep(5000);  // Let the user actually see something!
  driver.quit();  
 }
}

Python:

import time
from selenium import webdriver

driver = webdriver.Chrome('/path/to/chromedriver')  # Optional argument, if not specified will search path.
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()

控制 ChromeDriver 的生命週期

ChromeDriver 類別會在建立 ChromeDriver 伺服器程序時啟動,並在呼叫關閉時終止。因此,在每項測試建立 ChromeDriver 執行個體的大型測試套件中,這可能會耗費大量時間。解決方法有兩種:

  1. 使用 ChromeDriverService。大多數語言都支援這項功能,你可以自行啟動或停止 ChromeDriver 伺服器。如需 Java 範例 (使用 JUnit 4),請參閱:
import java.io.*;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.*;
public class GettingStartedWithService {
  private static ChromeDriverService service;
  private WebDriver driver;
  @BeforeClass
  public static void createAndStartService() throws IOException {
      service = new ChromeDriverService.Builder()
              .usingDriverExecutable(new File("/path/to/chromedriver"))
              .usingAnyFreePort()
              .build();
      service.start();
  }
  
  @AfterClass   
  public static void stopService() {
    service.stop();
  }

  @Before   
  public void createDriver() {
    driver = new RemoteWebDriver(service.getUrl(), new ChromeOptions());
  }

  @After   public void quitDriver() {
    driver.quit();
  }

  @Test   
  public void testGoogleSearch() {
    driver.get("http://www.google.com");
    // rest of the test...
  }
}

Python:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service('/path/to/chromedriver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
driver.quit()
  1. 執行測試前需另外啟動 ChromeDriver 伺服器,並使用 Remote WebDriver 連線至該伺服器。

航廈:

$ ./chromedriver
Starting ChromeDriver
76.0.3809.68 (...) on port 9515
...

Java:

import java.net.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.*;  

public class GettingStartedRemote {

  public static void main(String[] args) throws MalformedURLException {
    WebDriver driver = new RemoteWebDriver(
        new URL("http://127.0.0.1:9515"),
        new ChromeOptions());
    driver.get("http://www.google.com");
    driver.quit();
  }
}