Selenium
到底是什么?
Selenium,全称叫做:The Selenium Browser Automation Project
它是用来做 Web 浏览器自动化的项目
支持编写 Selenium 代码的语言
- Java
- Python
- Ruby
- C#
- JavaScript
- Kotlin
支持的主流语言较多,因此在使用 Selenium 进行 Web 自动化时更容易上手,适合更多的开发者
支持自动化的浏览器
- Chromium 系,比如 Chrome
- Firefox
- IE
- Opera
- Safari
- Windows Edge
- 不适用于移动端浏览器,移动端可使用 Appium 项目
要注意浏览器的版本,一些浏览器的早期版本或许不能很好的被支持
Selenium 核心
1. WebDriver
提供编写 Selenium
自动化代码的 API。使用这些 API 则可以像用户一样去操作浏览器
2. IDE
在 Firefox 和 Chrome 浏览器中提供的扩展工具,这是一种快捷生成测试的方式,容易上手。对于想快速了解 Selenium
是如何操作的,IDE 非常适合,而且也支持脚本的录制和回放

另外要提及的是,IDE 提供了控件元素定位工具,这在使用 API 编写测试时能提供很大帮助


3. Grid
用于将 WebDriver 自动化脚本应用到多台计算机和多个浏览器上,达到并行测试的目的,并且可以集中管理浏览器的版本和配置,适合于网站在浏览器上的兼容性测试
由于 WebDriver 是 Selenium 的核心组件,因此下文重点描述 WebDrvier 的内容,IDE 和 Grid 不过多介绍
Selenium WebDriver 核心
1. API
API 就是描述了一套提供给我们测试代码中可以使用的接口,调用这些接口能实现对浏览器的控制
2. 库文件
API 的具体实现。也就是我们在自动化工程代码中添加的依赖(dependency)。比如 Java 中的 .jar,C# 的 .dll 文件
3. 代理程序(驱动程序)
对于浏览器的控制,Selenium
需要借助代理程序,这些代理大多数都是浏览器厂家自己提供的(因此不同浏览器的代理程序不一致)。Selenium
借助它们来完成控制操作。同时,代理跟浏览器运行在一个平台上。如果我们操作的是远程机器的浏览器,那么代理也运行在远程机器
4. 测试框架
用来组织 Selenium
测试代码的库。比如 Java 中的 JUnit
这不是必须的,使用测试框架只是为了方便组织用例,如果有自己的一套方式方法,完全不需要用框架
Selenium WebDriver 的测试架构
1. WebDriver 直接通信方式控制本地浏览器

使用这种方式组织测试时,需要将 WebDriver 可执行文件添加到系统 path 环境变量中,并启动代理程序,比如测试 Chrome 浏览器的话,启动 chromedriver
1 2
| Starting ChromeDriver 2.25.426935 (820a95b0b81d33e42712f9198c215f703412e1a1) on port 9515 Only local connections are allowed.
|
初始化 driver 代码如下(这里用 Chrome 作为示例)
1 2 3 4
| import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver;
WebDriver driver = new ChromeDriver();
|
2. WebDriver 间接通信控制远程浏览器 1

这里要多提一下 RemoteWebDriver,它由 remote webdriver server
和 remote webdriver client
构成
server 可执行程序为 selenium-server-standalone-{VERSION}.jar
,运行在要测试的浏览器所在计算机上(如果测本地浏览器的话就在本地运行)
client 用来与 server 进行通信,我们编写自动化代码时使用它
此测试架构是较为常用的一种
初始化 drvier 代码如下(以 Chrome 为例)
1 2 3 4 5 6
| ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.setCapability("browserVersion", "80"); chromeOptions.setCapability("platformName", "Windows 10"); WebDriver driver = new RemoteWebDriver(new URL("http://www.driver-index.com"), chromeOptions); driver.get("http://www.example.com"); driver.quit();
|
3. WebDriver 间接控制远程浏览器 2

与 Selenium RC 的比较
Selenium RC
是 Selenium
项目的旧版(也即 Selenium 1),Selenium WebDriver
(Selenium 2)是更新的版本
WebDriver 比 RC 的 API 更加面向对象,更易于自动化代码的编写
WebDriver 比 RC 更好地模拟用户交互,尤其是一些网站的复杂交互
WebDriver 比 RC 拥有更好的浏览器支持
关于 Selenium
的基本介绍就到这里,考虑是否要开展 Web UI 自动化,需要思考以下几点:
- 项目是否具备一定的开发测试周期
- 页面 UI 是否能在一段时间后稳定下来
- 是否需要进行多浏览器,多系统的兼容性测试