title: “驱动要求”
weight: 2
通过 WebDriver,Selenium 支持市面上所有主流的浏览器,如 Chrom(ium)、Firefox、
Internet Explorer、Opera 和 Safari。 尽管并非所有浏览器都对远程控制提供官方支持,
但 WebDriver 尽可能使用浏览器的内置自动化支持来驱动浏览器。
WebDriver 的目标是尽可能模拟真实用户与浏览器的交互。
在不同的浏览器中,这可能有不同的级别。有关不同驱动程序特性的详细信息,
请参见 驱动程序特性。
尽管所有的驱动程序共享一个面向用户的界面来控制浏览器,但它们设置浏览器会话的方式略有不同。
由于许多驱动程序实现是由第三方提供的,所以它们不包括在标准的 Selenium 发行版中。
驱动程序实例化、配置文件管理和各种特定于浏览器的设置都是具体参数的例子,这些参数根据浏览器有
不同的需求。本节介绍了使用不同浏览器的基本要求。
将可执行文件添加到 PATH 中
大多数驱动程序需要 Selenium 额外的可执行文件才能与浏览器通信。您可以在启动 WebDriver
之前手动指定可执行文件的存放位置,但这会使测试的可移植性降低,因为可执行文件必须位于每台
计算机上的同一位置,或包含在测试代码存储库中。
通过将包含 WebDriver 二进制文件的文件夹添加到系统 path 环境变量中,Selenium
将能够找到其他二进制文件,而无需您的测试代码来定位驱动程序的确切位置。
- 创建一个目录来放置可执行文件,例如 C:\WebDriver\bin 或 /opt/WebDriver/bin
- 将目录添加到您的 path 中:
- 在 Windows 上 - 以管理员身份打开命令提示符,然后运行以下命令将目录永久添加到计算机上所有用户的路径中:
setx /m path "%path%;C:\WebDriver\bin\"
- 在 macOS 和 Linux 上的 Bash 用户 - 在终端中:
export PATH=$PATH:/opt/WebDriver/bin >> ~/.profile
- 现在您可以测试更改了。关闭所有打开的命令提示符,然后打开一个新的提示符。
输入您在上一步创建的文件夹中的某一个二进制文件的名称,例如:chromedriver
- 如果您的
PATH
配置正确,您将看到一些有关驱动程序启动的输出:
Starting ChromeDriver 2.25.426935 (820a95b0b81d33e42712f9198c215f703412e1a1) on port 9515
Only local connections are allowed.
您可以通过按 Ctrl + C 重新获得对命令提示符的控制。
快速参考
浏览器 | 支持的操作系统 | 维护者 | 下载 | 问题追踪 |
---|---|---|---|---|
Chromium/Chrome | Windows/macOS/Linux | 谷歌 | 下载 | 问题 |
火狐 | Windows/macOS/Linux | Mozilla | 下载 | 问题 |
Edge | Windows 10 | 微软 | 下载 | 问题 |
Internet Explorer | Windows | Selenium 项目组 | 下载 | 问题 |
Safari | macOS El Capitan 及更高版本 | 苹果 | 内置 | 问题 |
Opera | Windows/macOS/Linux | Opera | 下载 | 问题 |
Chromium/Chrome
要驱动 Chrome 或 Chromium,您必须下载
chromedriver
并将其放在系统路径上的文件夹中。
在 Linux 或 macOS 上,这意味着修改 PATH
环境变量。通过执行以下命令,您可以看到由冒号分隔的目录组成的系统路径:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
要在路径上包含 chromedriver(如果还没有的话),请确保包含 chromedriver 二进制文件的父目录。
下面的行将设置当前 PATH
环境变量的内容,在冒号后面添加一个额外的路径:
$ export PATH="$PATH:/path/to/chromedriver"
当您的路径上有 chromedriver 时,您应该可以从任何目录执行 chromedriver 可执行文件。
要实例化 Chrome/Chromium 会话,您可以执行以下操作:
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
WebDriver driver = new ChromeDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Chrome
driver = Chrome()
#或者使用上下文管理器
from selenium.webdriver import Chrome
with Chrome() as driver:
#你自己的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
IWebDriver driver = new ChromeDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :chrome
{{</ code-panel>}}
{{}}
const {Builder} = require(‘selenium-webdriver’);
(async function myFunction() {let driver = await new Builder().forBrowser(‘chrome’).build();
//你的代码放在这个块中
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
val driver: WebDriver = ChromeDriver()
{{</ code-panel>}}
{{</ code-tab>}}
请记住,您必须设置 chromedriver 可执行文件的路径。可以使用下行代码实现:
{{}}
{{}}
System.setProperty(“webdriver.chrome.driver”, “/path/to/chromedriver”);
{{</ code-panel>}}
{{}}
Chrome(executable_path=‘/path/to/chromedriver’)
{{</ code-panel>}}
{{}}
new ChromeDriver(“/path/to/chromedriver”);
{{</ code-panel>}}
{{}}
Selenium::WebDriver::Chrome.driver_path = “/path/to/chromedriver”
{{</ code-panel>}}
{{}}
chrome.setDefaultService(new chrome.ServiceBuilder(‘path/to/chromedriver’).build());
{{</ code-panel>}}
{{}}
System.setProperty(“webdriver.chrome.driver”, “/path/to/chromedriver”)
{{</ code-panel>}}
{{</ code-tab>}}
chromedriver 被实现为 WebDriver 远程服务器,该服务器通过公开 Chrome 的内部自动化代理接口来指示浏览器该怎么做。
火狐浏览器
从 Selenium 3 开始,Mozilla 通过 geckodriver
接管了火狐驱动程序的实现。火狐的新驱动程序被称为 geckodriver,可与 Firefox 48 及更高版本一起使用。
由于正在开发 Firefox WebDriver,因此 Firefox 版本越新,支持越好。
由于 geckodriver 是默认新的启动火狐浏览器的方式,您可以像 Selenium 2 那样实例化火狐浏览器:
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Firefox.FirefoxDriver;
WebDriver driver = new FirefoxDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Firefox
driver = Firefox()
#或者使用上下文管理器
from selenium.webdriver import Firefox
with Firefox() as driver:
#你自己的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
IWebDriver driver = new FirefoxDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :firefox
{{</ code-panel>}}
{{}}
const {Builder} = require(‘selenium-webdriver’);
(async function myFunction() {let driver = await new Builder().forBrowser(‘firefox’).build();
// 你自己的代码放在这个块中
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.Firefox.FirefoxDriver
val driver: WebDriver = FirefoxDriver()
{{</ code-panel>}}
{{</ code-tab>}}
如果您不想使用 PATH 设置 geckodriver 的位置,请在代码中设置 geckodriver 的位置:
{{}}
{{}}
System.setProperty(“webdriver.gecko.driver”, “/path/to/geckodriver”);
{{</ code-panel>}}
{{}}
Firefox(executable_path=‘/path/to/geckodriver’)
{{</ code-panel>}}
{{}}
new FirefoxDriver(“/path/to/geckodriver”);
{{</ code-panel>}}
{{}}
Selenium::WebDriver::Firefox.driver_path = “/path/to/geckodriver”
{{</ code-panel>}}
{{}}
const firefox = require(‘selenium-webdriver/firefox’);
const options = new firefox.Options();
options.setBinary(“/path/to/geckodriver”);
{{</ code-panel>}}
{{}}
System.setProperty(“webdriver.gecko.driver”, “/path/to/geckodriver”)
{{</ code-panel>}}
{{</ code-tab>}}
也可以在运行时设置属性:
mvn test -Dwebdriver.gecko.driver=/path/to/geckodriver
当前,可以通过安装 Firefox 47.0.1
或 45 ESR 并指定 marionette
功能为 false 来还原到功能更强大的旧版 Firefox 驱动程序。Firefox 的更高版本不再兼容。
Edge
Edge 是微软最新的浏览器,内置在 Windows 10 和 Windows Server 2016 中。Edge 的更新与 Windows
的主要更新捆绑在一起,因此您需要下载一个与您当前安装的 Windows 版本的版本号匹配的二进制文件。
Edge 开发者网站
包含指向所有可用的二进制文件的链接。针对 EdgeDriver 实现的 bug 可以在
微软网站
中提出。如果您想针对 Edge 运行测试,但没有 Windows 10,微软在
Edge 开发者网站
上为测试人员提供了免费的虚拟机。
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
WebDriver driver = new EdgeDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Edge
driver = Edge()
#或使用上下文管理器
from selenium.webdriver import Edge
with Edge() as driver:
#你的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.Edge;
IWebDriver driver = new EdgeDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :edge
{{</ code-panel>}}
{{}}
const {Builder} = require(‘selenium-webdriver’);
(async function myFunction() {let driver = await new Builder().forBrowser(‘MicrosoftEdge’).build();
// 你的代码放在这个块中
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.edge.EdgeDriver
val driver: WebDriver = EdgeDriver()
{{</ code-panel>}}
{{</ code-tab>}}
如果您的路径中没有 Edge 驱动程序,您可以使用以下行设置路径:
{{}}
{{}}
System.setProperty(“webdriver.edge.driver”, “C:/path/to/MicrosoftWebDriver.exe”);
{{</ code-panel>}}
{{}}
Edge(executable_path=‘/path/to/MicrosoftWebDriver.exe’)
{{</ code-panel>}}
{{}}
new EdgeDriver(“/path/to/MicrosoftWebDriver.exe”);
{{</ code-panel>}}
{{}}
Selenium::WebDriver::Edge.driver_path = “C:/path/to/MicrosoftWebDriver.exe”
{{</ code-panel>}}
{{}}
const {Builder} = require(“selenium-webdriver”);
const edge = require(‘selenium-webdriver/edge’);
let service = new edge.ServiceBuilder(“/path/to/msedgedriver.exe”);
(async function test() {
let driver = await new Builder()
.setEdgeService(service)
.forBrowser(‘MicrosoftEdge’)
.build();
})();
{{</ code-panel>}}
{{}}
System.setProperty(“webdriver.edge.driver”, “C:/path/to/MicrosoftWebDriver.exe”)
{{</ code-panel>}}
{{</ code-tab>}}
IE 浏览器
在 Windows 10 之前,IE 一直是微软的默认浏览器,尽管它仍被包含在 Windows 10 中。
Internet Explorer Driver 是唯一的 Selenium 项目组旨在支持
微软认为当前
版本的驱动程序。旧版本可能可以工作,但将不受支持。
虽然 Selenium 项目为 32 位和 64 位版本的 IE 提供了二进制文件,但是 IE 10 和 11 在 64 位驱动程序上
有一些限制,
但是使用 32 位驱动程序仍然可以很好地工作。应该注意的是,由于 IE 浏览器的首选项是根据登录用户的帐户保存的,
因此需要进行一些额外的设置。
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
WebDriver driver = new InternetExplorerDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Ie
driver = Ie()
#或使用上下文管理器
from selenium.webdriver import Ie
with Ie() as driver:
#你的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
IWebDriver driver = new InternetExplorerDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :internet_explorer
{{</ code-panel>}}
{{}}
const {Builder} = require(‘selenium-webdriver’);
(async function myFunction() {let driver = await new Builder().forBrowser(‘internet explorer’).build();
// 你的代码放在这个块中
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.ie.InternetExplorerDriver
val driver: WebDriver = InternetExplorerDriver()
{{</ code-panel>}}
{{</ code-tab>}}
如果 IE 浏览器驱动程序不在您的路径中,您可以使用以下行设置路径:
{{}}
{{}}
System.setProperty(“webdriver.ie.driver”, “C:/path/to/IEDriver.exe”);
{{</ code-panel>}}
{{}}
Ie(executable_path=‘/path/to/IEDriverServer.exe’)
{{</ code-panel>}}
{{}}
new InternetExplorerDriver(“C:/path/to/IEDriver.exe”);
{{</ code-panel>}}
{{}}
Selenium::WebDriver::IE.driver_path = “C:/path/to/IEDriver.exe”
{{</ code-panel>}}
{{}}
const {Builder} = require(“selenium-webdriver”);
const ie = require(‘selenium-webdriver/ie’);
let service = new ie.ServiceBuilder(“/path/to/IEDriverServer.exe”);
(async function test() {
let driver = await new Builder()
.setIeService(service)
.forBrowser(‘internet explorer’)
.build();
})();
{{</ code-panel>}}
{{}}
System.setProperty(“webdriver.ie.driver”, “C:/path/to/IEDriver.exe”)
{{</ code-panel>}}
{{</ code-tab>}}
微软还为 Windows 7 和 8.1 中的 IE 11
提供了一个 WebDriver 二进制版本。自 2014 年以来就没有更新过,它是基于 W3 规范的草案版本。
Jim Evans
写了一篇关于微软实现的优秀文章。
Opera
Opera 的当前版本是建立在 Chromium 引擎之上的,而 WebDriver 现在是通过闭源的
Opera Chromium 驱动程序来支持的,
它可以被添加到您的路径或作为系统属性。
实例化一个驱动程序会话类似于 Firefox 和 Chromium:
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.opera.OperaDriver;
WebDriver driver = new OperaDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Opera
driver = Opera()
#或使用上下文管理器
from selenium.webdriver import Opera
with Opera() as driver:
#你的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.Opera;
IWebDriver driver = new OperaDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :opera
{{</ code-panel>}}
{{}}
const {Builder} = require(“selenium-webdriver”);
const opera = require(‘selenium-webdriver/opera’);
(async function test() {
let driver = await new Builder()
.forBrowser(‘opera’)
.build();
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.opera.OperaDriver
val driver: WebDriver = OperaDriver()
{{</ code-panel>}}
{{</ code-tab>}}
Safari
High Sierra and later:
- 首先从终端运行以下命令
时间并在提示符下键入密码以授权WebDriver
safaridriver --enable
El Capitan and Sierra:
- 启用 Safari 首选项中的 Developer 菜单
- 从 “开发” 菜单中选择 “允许远程自动化” 选项
- 第一次运行时在终端输入以下命令,并在提示符处输入密码以授权 WebDriver
/usr/bin/safaridriver -p 1337</
你可以使用以下代码开始一个驱动程序会话:
{{}}
{{}}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.safari.SafariDriver;
WebDriver driver = new SafariDriver();
{{</ code-panel>}}
{{}}
#简单赋值
from selenium.webdriver import Safari
driver = Safari()
#或使用上下文管理器
from selenium.webdriver import Safari
with Safari() as driver:
#你的代码放在这个缩进中
{{</ code-panel>}}
{{}}
using OpenQA.Selenium;
using OpenQA.Selenium.Safari;
IWebDriver driver = new SafariDriver();
{{</ code-panel>}}
{{}}
require “selenium-webdriver”
driver = Selenium::WebDriver.for :safari
{{</ code-panel>}}
{{}}
const {Builder} = require(‘selenium-webdriver’);
(async function myFunction() {let driver = await new Builder().forBrowser(‘safari’).build();
// 你的代码放在这个块中
})();
{{</ code-panel>}}
{{}}
import org.openqa.selenium.WebDriver
import org.openqa.selenium.safari.SafariDriver
val driver: WebDriver = SafariDriver()
{{</ code-panel>}}
{{</ code-tab>}}
那些希望在 iOS 上实现 Safari 自动化的人应该关注Appium 项目。
虽然 Safari 之前也支持 Windows,但苹果早就放弃了对它的支持,这让它成为了一个糟糕的测试平台。
模拟浏览器
HtmlUnit
HtmlUnit 是一个 “针对 Java 程序的无图形界面浏览器”。它为 HTML 文档建模,并提供一个 API,
允许您调用页面、填写表单、单击链接等。它支持 JavaScript,能够使用 AJAX 库,根据使用的配置模拟
Chrome、Firefox 或 IE。它已经迁移到一个新位置 了。
源文件保存在 svn 上。
PhantomJS
PhantomJS 是一款基于 Webkit 的无头浏览器,尽管它的版本比谷歌 Chrome 或 Safari 要老得多。虽然曾经很流行,
但现在明智的做法是避免 PhantomJS。这个项目
从 8 月 5 日起
就一直没有被维护过,所以尽管网络会继续变化,PhantomJS 也不会更新。在谷歌宣布可以无头运行
Chrome 之后,现在 Mozilla 的火狐浏览器也提供了这个功能。
官方链接为:https://www.selenium.dev/documentation/zh-cn/webdriver/driver_requirements