自动化测试工具 Selenium WebDriver 入门教程

标签: 自动化 测试 工具 | 发表时间:2014-12-17 16:11 | 作者:kukiwi
出处:http://www.iteye.com

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

  一、下载文件 


先要去官网( 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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
     < modelVersion >4.0.0</ modelVersion >
     < groupId >Selenium2Test</ groupId >
     < artifactId >Selenium2Test</ artifactId >
     < version >1.0</ version >
     < dependencies >
         < dependency >
             < groupId >org.seleniumhq.selenium</ groupId >
             < artifactId >selenium-java</ artifactId >
             < version >2.25.0</ version >
         </ dependency >
         < dependency >
             < groupId >com.opera</ groupId >
             < artifactId >operadriver</ artifactId >
         </ dependency >
     </ dependencies >
     < dependencyManagement >
         < dependencies >
             < dependency >
                 < groupId >com.opera</ groupId >
                 < artifactId >operadriver</ artifactId >
                 < version >0.16</ version >
                 < exclusions >
                     < exclusion >
                         < groupId >org.seleniumhq.selenium</ groupId >
                         < artifactId >selenium-remote-driver</ artifactId >
                     </ exclusion >
                 </ exclusions >
             </ dependency >
         </ dependencies >
     </ dependencyManagement >
</ project >

 

pom.xml 修改保存后,eclipse 会自动把需要的 jar 包下载完成。


【2. 测试 FireFox】 
Selenium 最初就是在 FireFox 上做起来的插件,所以我们先来搭建 FireFox 的环境。 
确保你正确安装了 FireFox 后,就可以直接编写 java 代码测试喽。 

在 lesson1 目录下建立 ExampleForFireFox.java 
(因为国内不少朋友访问 google 的时候会出问题,所以我就把代码中的 google 变成 baidu 了) 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package lesson1;
 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
 
public class ExampleForFireFox  {
     public static void main(String[] args) {
         // 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
//      System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
         // 创建一个 FireFox 的浏览器实例
         WebDriver driver =  new FirefoxDriver();
 
         // 让浏览器访问 Baidu
         driver.get( "http://www.baidu.com" );
         // 用下面代码也可以实现
         // driver.navigate().to("http://www.baidu.com");
 
         // 获取 网页的 title
         System.out.println( "1 Page title is: " + driver.getTitle());
 
         // 通过 id 找到 input 的 DOM
         WebElement element = driver.findElement(By.id( "kw" ));
 
         // 输入关键字
         element.sendKeys( "zTree" );
 
         // 提交 input 所在的  form
         element.submit();
         
         // 通过判断 title 内容等待搜索页面加载完毕,间隔10秒
         ( new WebDriverWait(driver,  10 )).until( new ExpectedCondition<Boolean>() {
             public Boolean apply(WebDriver d) {
                 return d.getTitle().toLowerCase().endsWith( "ztree" );
             }
         });
 
         // 显示搜索结果页面的 title
         System.out.println( "2 Page title is: " + driver.getTitle());
         
         //关闭浏览器
         driver.quit();
     }
}


普通情况下,直接运行代码就可以看到会自动弹出 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 
按照人家给的例子来修改我们的测试代码吧: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package lesson1;
 
import java.io.File;
import java.io.IOException;
 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
 
public class ExampleForChrome {
     public static void main(String[] args)  throws IOException {
         // 设置 chrome 的路径
         System.setProperty(
                 "webdriver.chrome.driver" ,
                 "C:\\Documents and Settings\\sq\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe" );
         // 创建一个 ChromeDriver 的接口,用于连接 Chrome
         @SuppressWarnings ( "deprecation" )
         ChromeDriverService service =  new ChromeDriverService.Builder()
                 .usingChromeDriverExecutable(
                         new File(
                                 "E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe" ))
                 .usingAnyFreePort().build();
         service.start();
         // 创建一个 Chrome 的浏览器实例
         WebDriver driver =  new RemoteWebDriver(service.getUrl(),
                 DesiredCapabilities.chrome());
 
         // 让浏览器访问 Baidu
         driver.get( "http://www.baidu.com" );
         // 用下面代码也可以实现
         // driver.navigate().to("http://www.baidu.com");
 
         // 获取 网页的 title
         System.out.println( "1 Page title is: " + driver.getTitle());
 
         // 通过 id 找到 input 的 DOM
         WebElement element = driver.findElement(By.id( "kw" ));
 
         // 输入关键字
         element.sendKeys( "zTree" );
 
         // 提交 input 所在的 form
         element.submit();
 
         // 通过判断 title 内容等待搜索页面加载完毕,间隔10秒
         ( new WebDriverWait(driver,  10 )).until( new ExpectedCondition<Boolean>() {
             public Boolean apply(WebDriver d) {
                 return d.getTitle().toLowerCase().endsWith( "ztree" );
             }
         });
 
         // 显示搜索结果页面的 title
         System.out.println( "2 Page title is: " + driver.getTitle());
 
         // 关闭浏览器
         driver.quit();
         // 关闭 ChromeDriver 接口
         service.stop();
 
     }
}


运行一下看看,是不是一切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 了 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package lesson1;
 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
 
public class ExampleForIE {
     public static void main(String[] args) {
         // 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
         // System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
         // 创建一个 FireFox 的浏览器实例
         WebDriver driver =  new InternetExplorerDriver();
 
         // 让浏览器访问 Baidu
         driver.get( "http://www.baidu.com" );
         // 用下面代码也可以实现
         // driver.navigate().to("http://www.baidu.com");
 
         // 获取 网页的 title
         System.out.println( "1 Page title is: " + driver.getTitle());
 
         // 通过 id 找到 input 的 DOM
         WebElement element = driver.findElement(By.id( "kw" ));
 
         // 输入关键字
         element.sendKeys( "zTree" );
 
         // 提交 input 所在的 form
         element.submit();
 
         // 通过判断 title 内容等待搜索页面加载完毕,间隔10秒
         ( new WebDriverWait(driver,  10 )).until( new ExpectedCondition<Boolean>() {
             public Boolean apply(WebDriver d) {
                 return d.getTitle().toLowerCase().endsWith( "ztree" );
             }
         });
 
         // 显示搜索结果页面的 title
         System.out.println( "2 Page title is: " + driver.getTitle());
 
         // 关闭浏览器
         driver.quit();
     }
}


运行一下,是不是 so easy? 

入门工作完成,现在完全可以利用 java 代码,让 Selenium 自动执行我们设置好的测试用例了,不过.....这仅仅是个开始。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [自动化 测试 工具] 推荐:

Android 自动化测试工具初探

- - IT瘾-geek
Android 自动化测试工具初探.    这段几乎都编写代码,没有新的心得体会.唯一由感想的是在测试上.由于策划的变动,接口的完善等因素,总在不停的修改功能,修改代码.由于项目中的代码都经过了好多少,又没有很好的架构规划.所以在修改或测试的时候难免会有遗漏的地方,这个时候就在想android是不是也应该有自动化测试工具来辅助测试.使得功能更完善点.本期的创新文档只能算是对自动化创新工具的一种简介..

自动化测试工具 Selenium WebDriver 入门教程

- - 行业应用 - ITeye博客
先要去官网( http://seleniumhq.org/download/)下载必需的文件: . Selenium IDE (专门用于 FireFox 测试的独立界面,可以录制测试步骤,但我更倾向于写代码做标准的功能测试). Selenium Server (可以输入指令控制、可以解决跨域的 js 问题,等到后面学到了再讲吧).

如何做一个能害死人的自动化测试工具

- james - 透明思考 - Thoughts
你是一家大公司里不得志的程序员. 和你同年进公司的那些人在核心业务上拼命工作,被客户骂,加班,交付,开庆功会,拿奖金. 而你,不知道怎么的被放到一个叫做“测试工具开发”的边角部门里,干着一些不疼不痒不影响公司业绩的工作. 首先,你要启动一个自主开发自动化测试工具的项目. 让老板们相信自动化测试的重要性并不困难,世界上有无数的文章和书籍在讲这件事,你们公司请的咨询顾问一定也会说到这件事,这些都是你的帮手.

iPhone App自动化测试

- BeerBubble - Taobao QA Team
         无线客户端的发展很快,特别针对是android和ios两款无线操作系统的客户端应用,相应的测试工具也应运而生,这里主要给大家介绍一些针对iPhone App的自动化测试工具.          首先,我们把这些测试框架分为三大类:接口测试工具、注入式UI测试工具、录放式UI测试工具.

Android Robotium自动化测试

- - CSDN博客移动开发推荐文章
1、官方网站下载测试工程demo. 从 http://code.google.com/p/robotium/downloads/detail?name=ExampleTestProject_v3.6.zip 下载官方的Android测试工程demo. 解压后的文件NotePad、NotePadTest、readme.txt.

Android UiAutomator 自动化测试

- - 操作系统 - ITeye博客
一、一个BUG引发的问题.     如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”. 我想,最好的方式应该是自动化测试.     那么,自动化测试可以完成哪些任务呢.     简单的说,那些重复性的测试工作,都可以交给自动化完成:.         1、设置手机的语言.         2、添加、删除、收藏联系人.

Robotium 自动化测试

- - CSDN博客推荐文章
Robotium 自动化测试. Android Studio环境下,在所要测试的Module的build.gradle文件下添加,. Robotium即是对Instrumentation框架方法的封装,所以使用之前需要继承测试类,重写构造器,setUp()和tearDown()方法. 其中继承的是ActivityInstrumentationTestCase2测试类.

Android自动化测试解决方案

- Haides - InfoQ中文站
现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, MonkeyRunner,Robotium,以及 Robolectric. 另外LessPainful也提供服务来进行真实设备上的自动化测试.

InstrumentDriver,对iOS自动化测试说 Yes!

- - Taobao QA Team
    InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例.     研究过iOS自动化测试的同学肯定对 instrument UI Automation 有所耳闻,或者已经使用它进行自动化测试实践.

菜鸟学自动化测试(九)----WebDirver

- - 博客园_首页
关于什么是WebDirver,上一节做了简单的描述,环境也在上一章中搭建完成. 下面我们拷贝了官网提供的一个实例. 让其在我们的eclipse中运行. Selenium WebDirver 代码如下:. // 用Firefox driver创建一个新的的实例. //注意:其他的代码依赖于界面. WebDriver driver = new FirefoxDriver();// 这里我们可以使用firefox来运行测试用例.