本页介绍了如何开始使用 ChromeDriver 在桌面设备 (Windows/Mac/Linux) 上测试您的网站。您还可以阅读 Android 使用入门或 ChromeOS 使用入门。
初始设置
ChromeDriver 是 Selenium WebDriver 用来控制 Chrome 的独立可执行文件。它由 Chromium 团队在 WebDriver 贡献者的帮助下进行维护。如果您不熟悉 Selenium WebDriver,请查看 Selenium 网站。
如需设置要通过 ChromeDriver 运行的测试,请按以下步骤操作:
- 确保 Chromium/Google Chrome 安装在可识别的位置
- ChromeDriver 要求在您的平台默认位置安装 Chrome。您还可以通过设置特殊功能来强制 ChromeDriver 使用自定义位置。
- 从此网站的下载部分下载适用于您平台的 ChromeDriver 二进制文件
- 帮助 WebDriver 找到已下载的 ChromeDriver 可执行文件
以下步骤应该能帮助您解决问题:
- 在 PATH 环境变量中添加 ChromeDriver 位置
- (仅限 Java)使用 webdriver.chrome.driver 系统属性指定其位置(请参阅下面的示例)
- (仅限 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 实例),这可能会浪费大量时间。解决此问题的方法有两种:
- 使用 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()
- 请在运行测试之前单独启动 ChromeDriver 服务器,并使用远程 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();
}
}