这里只记录学习 Selenium WebDriver 的过程,尤其是运行时可能出现的问题,学习 java 与 Selenium WebDriver 配合的方法。
一、下载文件
先要去官网(http://seleniumhq.org/download/)下载必需的文件:
- Selenium IDE (专门用于 FireFox 测试的独立界面,可以录制测试步骤,但我更倾向于写代码做标准的功能测试)
- Selenium Server (可以输入指令控制、可以解决跨域的 js 问题,等到后面学到了再讲吧)
- The Internet Explorer Driver Server (专门用于IE测试的)
- Selenium Client Drivers (可以找到你熟悉的语言,例如我选择的 Java)
- Third Party Browser Drivers NOT SUPPORTED/DEVELOPED by seleniumhq(第三方开发的 Selenium 插件,第一个就是 Chrome 的,否则你就没办法测试 Chrome 了)
- 其他的,就根据你自己的需要寻找吧,目前这些足够我用了。
二、安装 & 运行
貌似摆弄新东西时,只有 “Hello World” 蹦出来以后,我们这些初学者才会感到情绪稳定,那就赶紧开始吧。
对于初期打算直接用编程方式制作测试用例的情况来说,Selenium IDE、Selenium Server 都可以不用安装执行。
英语好的朋友可以直接看官网的文档(http://seleniumhq.org/documentation/)就能够开始使用了。
看中文的,就继续听我唠叨:
【1. 建立 Maven 工程】
Selenium 支持 maven 工程,这会让你的工作更加简便。
用 Eclipse 建个 Maven 的工程,建成后,直接修改 pom.xml,(参考:http://seleniumhq.org/docs/03_webdriver.html#setting-up-a-selenium-webdriver-project)
01 |
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
02 |
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
|
03 |
< modelVersion >4.0.0</ modelVersion >
|
04 |
< groupId >Selenium2Test</ groupId >
|
05 |
< artifactId >Selenium2Test</ artifactId >
|
06 |
< version >1.0</ version >
|
09 |
< groupId >org.seleniumhq.selenium</ groupId >
|
10 |
< artifactId >selenium-java</ artifactId >
|
11 |
< version >2.25.0</ version >
|
14 |
< groupId >com.opera</ groupId >
|
15 |
< artifactId >operadriver</ artifactId >
|
18 |
< dependencyManagement >
|
21 |
< groupId >com.opera</ groupId >
|
22 |
< artifactId >operadriver</ artifactId >
|
23 |
< version >0.16</ version >
|
26 |
< groupId >org.seleniumhq.selenium</ groupId >
|
27 |
< artifactId >selenium-remote-driver</ artifactId >
|
32 |
</ dependencyManagement >
|
pom.xml 修改保存后,eclipse 会自动把需要的 jar 包下载完成。
【2. 测试 FireFox】
Selenium 最初就是在 FireFox 上做起来的插件,所以我们先来搭建 FireFox 的环境。
确保你正确安装了 FireFox 后,就可以直接编写 java 代码测试喽。
在 lesson1 目录下建立 ExampleForFireFox.java
(因为国内不少朋友访问 google 的时候会出问题,所以我就把代码中的 google 变成 baidu 了)
03 |
import org.openqa.selenium.By;
|
04 |
import org.openqa.selenium.WebDriver;
|
05 |
import org.openqa.selenium.WebElement;
|
06 |
import org.openqa.selenium.firefox.FirefoxDriver;
|
07 |
import org.openqa.selenium.support.ui.ExpectedCondition;
|
08 |
import org.openqa.selenium.support.ui.WebDriverWait;
|
10 |
public class ExampleForFireFox {
|
11 |
public static void main(String[] args) {
|
15 |
WebDriver driver = new FirefoxDriver();
|
18 |
driver.get( "http://www.baidu.com" );
|
23 |
System.out.println( "1 Page title is: " + driver.getTitle());
|
26 |
WebElement element = driver.findElement(By.id( "kw" ));
|
29 |
element.sendKeys( "zTree" );
|
35 |
( new WebDriverWait(driver, 10 )).until( new ExpectedCondition<Boolean>() {
|
36 |
public Boolean apply(WebDriver d) {
|
37 |
return d.getTitle().toLowerCase().endsWith( "ztree" );
|
42 |
System.out.println( "2 Page title is: " + driver.getTitle());
|
普通情况下,直接运行代码就可以看到会自动弹出 FireFox 窗口,访问 baidu.com,然后输入关键字并查询,一切都是自动完成的。
错误提醒:
1)Exception in thread "main" org.openqa.selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed.
出现这个错误,是说明你的 FireFox 文件并没有安装在默认目录下,这时候需要在最开始执行:System.setProperty 设置环境变量 "webdriver.firefox.bin" 将自己机器上 FireFox 的正确路径设置完毕后即可。
2)Exception in thread "main" org.openqa.selenium.UnsupportedCommandException: Bad request
出现这个错误,很有意思。 查了一下 有人说应该是 hosts 出现了问题,加上一个 127.0.0.1 localhost 就行了,但我的 hosts 上肯定有这个玩意,为啥也会出现这个问题呢?
经过调试,发现 127.0.0.1 localhost 的设置必须要在 hosts 文件的最开始,而且如果后面有其他设置后,也不要再出现同样的 127.0.0.1 localhost ,只要有就会出错。(因为我为了方便访问 google 的网站,专门加入了 smarthosts 的内容,导致了 localhost 的重复)
【3. 测试 Chrome】
Chrome 虽然不是 Selenium 的原配,但是没办法,她太火辣了,绝对不能抛下她不管的。
把 ExampleForFireFox.java 稍微修改就可以制作出一个 ExampleForChrome.java ,直接把 new FireFoxDriver() 修改为 new ChromeDriver() 你会发现还是行不通。
错误如下:
1)Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see http://code.google.com/p/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://code.google.com/p/chromedriver/downloads/list
这应该是找不到 chrome 的文件,好吧,利用 System.setProperty 方法添加路径,这里要注意,是 “webdriver.chrome.driver” 可不是“webdriver.chrome.bin”
设置路径后还是会报错:
2)[6416:4580:1204/173852:ERROR:gpu_info_collector_win.cc(91)] Can't retrieve a valid WinSAT assessment.
这个貌似是因为 Selenium 无法直接启动 Chrome 导致的,必须要通过前面咱们下载 Chrome 的第三方插件 ChromeDriver,去看第一个错误中提示给你的 网址:http://code.google.com/p/selenium/wiki/ChromeDriver
按照人家给的例子来修改我们的测试代码吧:
04 |
import java.io.IOException;
|
06 |
import org.openqa.selenium.By;
|
07 |
import org.openqa.selenium.WebDriver;
|
08 |
import org.openqa.selenium.WebElement;
|
09 |
import org.openqa.selenium.chrome.ChromeDriverService;
|
10 |
import org.openqa.selenium.remote.DesiredCapabilities;
|
11 |
import org.openqa.selenium.remote.RemoteWebDriver;
|
12 |
import org.openqa.selenium.support.ui.ExpectedCondition;
|
13 |
import org.openqa.selenium.support.ui.WebDriverWait;
|
15 |
public class ExampleForChrome {
|
16 |
public static void main(String[] args) throws IOException {
|
19 |
"webdriver.chrome.driver" ,
|
20 |
"C:\\Documents and Settings\\sq\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe" );
|
22 |
@SuppressWarnings ( "deprecation" )
|
23 |
ChromeDriverService service = new ChromeDriverService.Builder()
|
24 |
.usingChromeDriverExecutable(
|
26 |
"E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe" ))
|
27 |
.usingAnyFreePort().build();
|
30 |
WebDriver driver = new RemoteWebDriver(service.getUrl(),
|
31 |
DesiredCapabilities.chrome());
|
34 |
driver.get( "http://www.baidu.com" );
|
39 |
System.out.println( "1 Page title is: " + driver.getTitle());
|
42 |
WebElement element = driver.findElement(By.id( "kw" ));
|
45 |
element.sendKeys( "zTree" );
|
51 |
( new WebDriverWait(driver, 10 )).until( new ExpectedCondition<Boolean>() {
|
52 |
public Boolean apply(WebDriver d) {
|
53 |
return d.getTitle().toLowerCase().endsWith( "ztree" );
|
58 |
System.out.println( "2 Page title is: " + driver.getTitle());
|
运行一下看看,是不是一切OK了?
补充:仔细看了一下官网的介绍:Chrome Driver is maintained / supported by the Chromium project iteslf. 看来如果使用 new ChromeDriver() 的话,应该要安装 Chromium 而不是 Chrome,我现在懒得折腾了,有兴趣的童鞋可以试验一下。
【4. 测试 IE】
想逃避 IE 吗?? 作为前端开发,IE 你是必须要面对的,冲吧!
其实你会发现, Selenium 主要也就是针对 FireFox 和 IE 来制作的,所以把 FireFox 的代码修改为 IE 的,那是相当的容易,只需要简单地两步:
1)把 ExampleForFireFox.java 另存为 ExampleForIE.java
2)把 WebDriver driver = new FirefoxDriver(); 修改为 WebDriver driver = new InternetExplorerDriver();
3)一般大家的 IE都是默认路径吧,所以也就不用设置 property 了
03 |
import org.openqa.selenium.By;
|
04 |
import org.openqa.selenium.WebDriver;
|
05 |
import org.openqa.selenium.WebElement;
|
06 |
import org.openqa.selenium.ie.InternetExplorerDriver;
|
07 |
import org.openqa.selenium.support.ui.ExpectedCondition;
|
08 |
import org.openqa.selenium.support.ui.WebDriverWait;
|
10 |
public class ExampleForIE {
|
11 |
public static void main(String[] args) {
|
15 |
WebDriver driver = new InternetExplorerDriver();
|
18 |
driver.get( "http://www.baidu.com" );
|
23 |
System.out.println( "1 Page title is: " + driver.getTitle());
|
26 |
WebElement element = driver.findElement(By.id( "kw" ));
|
29 |
element.sendKeys( "zTree" );
|
35 |
( new WebDriverWait(driver, 10 )).until( new ExpectedCondition<Boolean>() {
|
36 |
public Boolean apply(WebDriver d) {
|
37 |
return d.getTitle().toLowerCase().endsWith( "ztree" );
|
42 |
System.out.println( "2 Page title is: " + driver.getTitle());
|
运行一下,是不是 so easy?
入门工作完成,现在完全可以利用 java 代码,让 Selenium 自动执行我们设置好的测试用例了,不过.....这仅仅是个开始。
分享到:
相关推荐
Selenium是一个用于Web应用的功能自动化测试的开源工具套件,它的核心组件包括Selenium IDE、Selenium RC 和 WebDriver。Selenium2是Selenium项目的最新版本,它结合了Selenium RC和WebDriver的优点,提供了更为强大...
### Selenium自动化测试入门知识点 #### 一、Selenium介绍 Selenium是一个强大的工具集,用于自动化Web应用测试。它的核心特点在于能够模拟真实的用户行为在Web浏览器中执行测试脚本,这种测试方式与用户手动操作...
总的来说,`JAVA Selenium 自动测试` 是一个强大且灵活的工具,适用于Web应用的自动化测试。掌握其基本用法和进阶技巧,可以帮助提升测试效率,降低维护成本。通过压缩包中的资源,学习者可以快速搭建测试环境,实践...
总结来说,《Playwright+Python 自动化测试》第一章主要介绍了自动化测试的背景,特别是Selenium的发展历程,以及Playwright相对于其他框架的优势。通过学习这一章,读者可以快速搭建测试环境,编写基本的自动化脚本...
Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 WebDriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动...
Selenium 作为UI自动化测试领域的主流工具之一,其重要性不言而喻。无论是对于刚入门的新手还是有一定经验的测试工程师来说,掌握Selenium及其周边技术和工具都是非常有价值的。通过本文介绍的知识点,希望可以帮助...
Selenium 主流版本包括 1.X、2.X、3.X、4.X 等,基于 SeleniumIDE 来实现自动化测试,作为一个火狐浏览器的插件存在的。Selenium 4 版本即将推出,支持跨浏览器+Selenium webdriver+grid。Selenium 是目前市场中最...
Selenium 是一个强大的工具包,用于自动化 Web 应用程序的测试。随着版本的发展,Selenium2(通常也被称为 WebDriver)已经成为主流,因为它支持多种浏览器和编程语言。在 Selenium2 中,WebDriver 的引入极大地简化...
Selenium是一种流行的开源自动化测试工具,广泛用于Web应用程序的功能测试。它允许测试人员编写在浏览器中自动执行的测试脚本,以便对Web应用程序的功能进行快速验证。Selenium的灵活性和广泛的支持使它成为许多测试...
- **定义**: Selenium 是一款主要用于 Web 应用程序的自动化测试工具,由 ThoughtWorks 开发。 - **核心特性**: - 运行在浏览器中,模拟真实用户操作。 - 支持多种主流浏览器(IE、Mozilla Firefox、Google Chrome...
### 自动化selenium2+python相关知识点 #### 一、Selenium2简介与Python集成 **Selenium2**是一个广泛使用的开源自动化测试框架,它主要用于Web应用的自动化测试。相较于早期版本,Selenium2提供了更为强大的功能...
Selenium作为一款优秀的开源自动化测试工具,不仅支持多种编程语言,如Java、Python、C#等,还能在不同的浏览器上执行测试脚本,极大地提高了测试效率和灵活性。本文将从初学者的角度出发,详细介绍Selenium2(即...
Selenium 是一个流行的开源自动化测试工具套件,主要用于 Web 应用程序的自动化测试。它由一系列独立的工具组成,可以支持多种浏览器和操作系统,并且具备强大的社区支持。 #### 二、Selenium 的优势 1. **重复性...
- **Selenium WebDriver**:提供了更直接的浏览器控制能力,适用于自动化测试。 #### 二、Selenium 2.0 特性 - **Selenium 2.0 更新**: - **Selenium 2.0** 引入了 WebDriver API,使得测试脚本能更直接地控制...
通过构建多层次跨平台的测试架构,并结合使用 Selenium 和 TestNG 等工具,可以显著提高 Web 应用程序的自动化测试效率和质量。这种架构不仅可以降低测试模块间的耦合度,还能够增强测试过程的可管理性和可控制性,...
总结,这份测试指南提供了Selenium和JMeter的入门教程,对这两个工具的基本概念、应用场景和配置方法进行了详尽的解释。对于希望实现测试自动化,尤其是Web应用功能测试和性能测试的团队,这是一份极具价值的参考...
《Packtpub Selenium 1.0 Testing Tools Beginners Guide Nov 2010》是一本针对初学者的Selenium测试工具指南,旨在帮助读者理解和掌握自动化Web应用测试的基础知识。Selenium是一个广泛使用的开源自动化测试框架,...