今天这篇讲的是快速入门 Selenium,通过阅读本文并且跟随操作,读者将能做到以下:
- 搭建本地 Selenium WebDriver 环境
- 了解 Selenium WebDriver,Selenium IDE 和 Grid 区别
如果只想知道 WebDriver 环境怎么搭,如何写出一个 Demo,那么可跳过下面的部分,直接看 Selenium WebDriver 环境搭建
,但仍建议了解其测试架构,这便于你知道为什么要部署这些应用
Selenium WebDriver 测试架构
1. 直接通信方式
上图中,WebDriver(WD)表示我们的自动化代码中使用到的 WD API,代理程序是一个驱动程序,用来控制浏览器,这是 WD 能控制浏览器的基础。大多数代理程序是浏览器厂商提供
这种方式执行 WebDriver 的客户端代码示例为:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
WebDriver driver = new ChromeDriver();
2. 间接通信方式
图中远程 PC 也可以是本地 PC,WebDriver 表示本地客户端代码,Remote WebDriver
是一个 Selenium Server,其可执行程序为 selenium-server-standalone-{VERSION}.jar
这种方式执行 WebDriver 的客户端代码示例为:
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();
这里多提一下,该架构方式依赖 selenium server,对于每个 session,需要及时将其关闭(WebDriver#quit
或者 Selenium#stop()
),否则会引发内存泄漏
Selenium WebDriver 环境搭建
1. 工具和库依赖
Java Maven
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.X</version>
</dependency>
Python 依赖
pip install selenium
2. 环境部署
1)代理程序环境变量配置
这里我下载的是 Chrome 的代理,将该代理所在的目录设置到环境变量中
Windows 10
以管理员方式打开命令行 cmd,然后执行命令(将 D:\selenium
改为你的 chromdriver 所在目录)
D:\> setx /m path "%path%;D:\selenium"
Mac OS (将 /Users/mac/selenium
改为你的 chromdriver 所在目录 )
$ export PATH="$PATH:/Users/mac/selenium"
2)启动服务
启动 selenium server
$ java -jar selenium-server-standalone-3.141.59.jar
启动成功则最后两行一般如下
16:35:10.572 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
16:35:10.750 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
这里面告诉你服务的端口号是 4444,可以用浏览器访问 http:127.0.0.1:4444/wd/hub
3. 编写客户端代码
以 Java 为例
public class Demo {
public static void main(String[] args) throws MalformedURLException {
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setCapability("browserVersion", "80");
chromeOptions.setCapability("platformName", "Mac OS X");
URL server = new URL("http://127.0.0.1:4444/wd/hub");
WebDriver driver = new RemoteWebDriver(server, chromeOptions);
driver.get("http://www.google.com");
driver.quit();
}
}
执行这段代码则 Selenium 会打开一个 Chrome 的新窗口,并访问 google 主页
错误的操作
1. server URL 写成 "http://127.0.0.1:4444
这样执行代码后会抛出一例异常
异常 Message 其实就是一个帮助页面的内容,用浏览器打开 http://127.0.0.1:4444
即可看到
正确访问 WebDriver 需要指定到位置 /wd/hub
2. 没有配置代理程序
代理程序可以通过设置环境变量 path(上文介绍的方法),也可以通过在代码或者命令行中添加
- 代码中添加(Java)
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
- 运行时添加
mvn test -Dwebdriver.chrome.driver=/path/to/chromedriver
- 运行代码前手动启动(不推荐)
如没有配置代理程序,执行代码时会遇到如下异常
Selenium WebDriver, Selenium IDE, Grid 区别
Selenium WebDriver
是 Selenium 的核心,是控制浏览器,提供客户端 API 的组件,编写自动化代码必不可少的部分
Selenium IDE
是 Selenium 提供的一款编写自动化代码的编辑器,是 Firefox 和 Chrome 的扩展程序,使用 IDE 能录制浏览器操作过程,同时它提供的定位工具能够自动提取 Element 参数
定位控件
Grid
用在编写完自动化代码后,如果你有如下需求时,使用 Grid 比较方便:需要对多台计算机,多个浏览器,或者多个浏览器版本同时进行自动化测试(兼容性测试)