`

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

阅读更多

<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 自动执行我们设置好的测试用例了,不过.....这仅仅是个开始。

分享到:
评论

相关推荐

    Selenium WebDriver实战宝典(吴晓华)

    全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用实例,第2部分实战应用篇基于丰富的实战案例讲解页面元素的定位方法以及...

    selenium WebDriver比较新的安装包

    **Selenium WebDriver** 是一个广泛使用的自动化测试工具,主要用于网页应用程序的测试。它模拟了真实用户的浏览器行为,允许测试人员编写脚本来控制浏览器执行各种操作,如点击按钮、填写表单、导航等。WebDriver ...

    selenium_webdriver(python)第一版.pdf

    【Selenium WebDriver(Python)第一版】文档是一个针对Python编程语言使用Selenium WebDriver进行Web自动化测试的教程。这篇文档特别适合已经具备Python基础知识,并希望通过Python和Selenium进行自动化测试的初学者...

    selenium webdriver第三版

    Selenium WebDriver是自动化测试领域的一款强大工具,尤其在Web应用测试方面表现卓越。它通过模拟用户行为与浏览器进行交互,从而实现对网页的自动化控制。《Selenium WebDriver(Python)第三版》这本书深入浅出地...

    Selenium WebDriver实战(JAVA版本)

    selenium webdriver是web自动化的一本经典著作,吴老集合python java不同版本。本资源为java版本,内容较新,无论是入门还是提升都有很大帮助。

    selenium+webdriver+python自动化测试

    将Python与Selenium WebDriver结合起来,可以创建功能强大的Web自动化测试工具。 在介绍“selenium+webdriver+python自动化测试”时,首先要了解以下几个核心知识点: 1. Selenium框架的组成:Selenium框架主要由...

    Selenium-Webdriver系列教程

    总之,Selenium-Webdriver教程将带领读者深入了解自动化测试的世界,通过学习和实践,可以提升测试效率,减少手动测试的工作量,提高软件质量。尽管Selenium 1.x仍有其存在价值,但Selenium 2.0(WebDriver)的先进...

    selenium webdriver基于python源码案例.pdf

    本文详细介绍了Selenium自动化测试的基础知识,包括Selenium的简介、Python环境安装、Selenium的安装与验证、浏览器驱动配置以及PyCharm的使用。通过这些步骤,读者可以快速搭建起Selenium自动化测试环境,并开始...

    selenium+webdriver学习文档

    Selenium 是一个开源的自动化测试工具,WebDriver 是 Selenium 的一个组件,用于模拟浏览器的行为。 描述:从基础到精通的学习 selenium+webdriver 的学习方法 这个学习文档旨在帮助读者从基础开始学习 Selenium+...

    基于Selenium WebDriver的B_S架构软件的自动化测试研究.pdf

    本文研究了基于Selenium WebDriver的B/S架构软件的自动化测试技术,详细介绍了使用Selenium WebDriver进行B/S架构软件自动化测试的方法,并通过一个具体案例来描述自动化测试的过程。文章强调了使用Selenium ...

    web自动化测试selenium+webdriver环境配置

    在本篇文章中,我们将详细介绍如何配置Selenium与WebDriver的环境,以便开始进行Web自动化测试。 首先,我们需要安装Java Development Kit (JDK)。因为Selenium主要使用Java编写,所以确保你的系统上已经安装了JDK...

    selenium webdriver基于python源码案例.epub

    selenium webdriver基于python源码案例,全是案例适合小白入门学习

    基于selenium webdriver 自动化测试框架

    由webdriver中文社区创办人土豆(本人技术笔名)所创建,该web自动化测试框架是用java语言编写的,基于selenium webdriver 的开源自动化测试框架,该框架结合了testng,selenium,webdriver,jxl,jodd-http 等工具。...

    selenium webdriver基于python源码案例

    Selenium WebDriver 基于 Python 源码案例 Selenium 是一个用于测试 Web 应用程序用户界面的常用框架。...本教程将指导您如何安装和使用 Selenium,如何编写自动化测试脚本,以及如何解决常见的问题。

    selenium2 Webdriver + Java 自动化测试实战和完全教程

    ### Selenium2 WebDriver + Java 自动化测试实战和完全教程 #### 快速开始 Selenium WebDriver 学习历程 ##### 一、快速开始 本章节主要介绍了如何快速启动 Selenium WebDriver 的学习之旅,适合刚接触 Selenium ...

    test webpage selenium webdriver

    在IT行业中,自动化测试是提升效率和质量的关键环节,而Selenium WebDriver则是一个广泛使用的开源自动化测试工具,尤其适用于Web应用程序。"Test webpage Selenium WebDriver"的主题涵盖了如何利用Selenium ...

    selenium webdriver (python)第三版

    综上所述,本书《selenium webdriver (python)第三版》是自动化测试学习者的一本必备参考书籍,它不仅为初学者提供了入门知识,也为中级和高级用户提供了深入的操作技巧和高级功能的实现方法。通过本书,读者可以...

Global site tag (gtag.js) - Google Analytics