转自:  http://www.360doc.com/content/14/0821/18/597197_403634783.shtml

zTree 东西不多,我也一直使用着原始的人工测试手段,随着内容的不断增多,测试起来就越发的繁杂,而且经常犯懒,这样就会忽略很多本该发现的问题,而且也容易出现旧的bug 反复出现的情况,这都是测试不规范造成的。要做好东西就要更加规范和严格,于是乎决定要学习一下 Selenium WebDriver,也就是原先的  Selenium v2 了,这方面整体的文章并不多,所以一边学着,自己一边整理吧。

对于这个可以自动化测试的工具( Selenium WebDriver)我就不做过多描述了,去 google、baidu 搜索一下即可。 我这里只记录学习  Selenium WebDriver 的过程,尤其是运行时可能出现的问题,当然了,我是做java的,我只学习 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

Xml代码
<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 了)

Java代码 

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 内容等待搜索页面加载完毕,Timeout 设置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

按照人家给的例子来修改我们的测试代码吧:

Java代码  收藏代码
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 内容等待搜索页面加载完毕,Timeout 设置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了?

【2012.12.06补充】

上一个 Demo 中无法正常使用 new ChromeDriver(),今天在做进一步学习时看到一篇文章(http://qa.blog.163.com/blog/static/19014700220122231779/?),恍然大悟,原来只需要把 'webdriver.chrome.driver?’ 的值设置为 chromedriver 的路径就可以了。

Java代码
package lesson1; import java.io.IOException; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait; public class ExampleForChrome2 {
public static void main(String[] args) throws IOException {
// 设置 chrome 的路径
System.setProperty(
"webdriver.chrome.driver",
"E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe");
// 创建一个 ChromeDriver 的接口,用于连接 Chrome
// 创建一个 Chrome 的浏览器实例
WebDriver driver = new ChromeDriver(); // 让浏览器访问 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 内容等待搜索页面加载完毕,Timeout 设置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(); // element = driver.findElement(By.id("kw"));
// // element.clear();
// element.click();
// element.clear();
// element.sendKeys("zTree");
// element.submit();
}
}

【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 了

Java代码
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 内容等待搜索页面加载完毕,Timeout 设置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 环境搭建和错误调试_chromedriver_win32必须下载否则无法测试chrome的更多相关文章

  1. Python+Selenium+webdriver环境搭建(windows)以及相关资源下载链接

    今天记录一下测试小菜鸟alter在测试入门的一点关于python+Selenium+webdriver环境搭建的经历以及资源分享.欢迎交流学习,批评指正. 一.Python的下载与安装 1.pytho ...

  2. [转]OPENCV3.3+CUDA9.0 环境搭建若干错误总结

    编译OpenCV设计启用OpenGL三维可视化支持和启用GPU CUDA并行加速处理的基本知识: 1.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL,这就意味着在OpenCV中可以轻 ...

  3. spark JAVA 开发环境搭建及远程调试

    spark JAVA 开发环境搭建及远程调试 以后要在项目中使用Spark 用户昵称文本做一下聚类分析,找出一些违规的昵称信息.以前折腾过Hadoop,于是看了下Spark官网的文档以及 github ...

  4. opencv在vc2010 express下环境搭建方法笔记+空白通用工程(已编译测试通过)(提供下载)

    opencv在VC2010 express版本下的环境搭建可以参见下面的wiki,这里面讲的非常清楚. http://wiki.opencv.org.cn/index.php/VC_2010_Expr ...

  5. React 环境搭建及页面调试方法

    React 环境搭建及页面调试方法 |作者:RexFang |出处:http://www.cnblogs.com/rexfang/ |关于作者:Java 程序员一枚 |版权:本文版权归作者和博客园共有 ...

  6. 转:python webdriver 环境搭建

    第一节 环境搭建准备工具如下:-------------------------------------------------------------下载 python[python 开发环境]ht ...

  7. 利用maven开发springMVC项目——开发环境搭建(版本错误解决)

    申明:部分内容参见别人的博客,没有任何的商业用途,只是作为自己学习使用.(大佬博客) 一.相关环境 - eclipse :eclipse-jee-oxygen-3-win32-x86_64(下载地址) ...

  8. webDriver环境搭建与测试

    1.安装jdk 2.安装eclipse 3.安装selenium 由于使用的是开发语言是java,因此需要安装java版的selenium包.下载地址:http://pan.baidu.com/s/1 ...

  9. Selenium2 WebDriver环境搭建

    1.下载Selenium Client Servers包 在Selenium官网上可以下载到最新的开源的包http://seleniumhq.org/download/,根据编写测试脚本所使用的语言下 ...

随机推荐

  1. ZOJ 1654 Place the Robots建图思维(分块思想)+二分匹配

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 AC一百道水题,不如AC一道难题来的舒服. 题意:一个n*m地图 ...

  2. win7 64 安装scikit-learn

    1. scikit-learn简单介绍 scikit-learn是一个基于NumPy.SciPy.Matplotlib的开源机器学习工具包.採用Python语言编写.主要涵盖分类. 回归和聚类等算法, ...

  3. python标准库介绍——17 tempfile 模块详解

    ==tempfile 模块== [Example 2-6 #eg-2-6] 中展示的 ``tempfile`` 模块允许你快速地创建名称唯一的临时文件供使用. ====Example 2-6. 使用 ...

  4. 阿里云-DRDS(转)

    分库分表 DRDS 在后端将数据量较大的数据表水平拆分到后端的每个 RDS 数据库中,这些拆分到RDS中的数据库被称为分库,分库中的表称为分表.DRDS 由每个分库负责每一份数据的读写操作,从而有效的 ...

  5. 获取Android运行apk的packagename 和activityname

    自动化测试中经常遇到这个问题,关于这个题目,方法众多,咱的目的是找个比较简单靠谱的: 方法一: 先进入cmd窗口,adb shell 后: cd /data/data ls 可以看到包名了吧,缺点很明 ...

  6. java的IO总结(一)

    Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行 ...

  7. get_class 返回对象的类名

    get_class — 返回对象的类名 传一个对象,可以把这个对象的类名返回出来(字符串) 参考: http://php.net/manual/zh/function.get-class.php

  8. OSGi中的ServletContext

    在OSGi中,不能的bundle分属不同的装载器(Class Loader), 在J2EE 应用中,不同BUNDLE 中的JSP 所相应的ServletContext对象不同,这与通常情况下的应用是不 ...

  9. 并行开发系列 Plinq等

    http://www.cnblogs.com/huangxincheng/archive/2012/04/03/2430638.html

  10. tomcat的server.xml配置及context配置直接引用工程

    server.xml配置简介         下面是这个文件中的基本配置信息,更具体的配置信息见tomcat的文档         server:         port     指定一个端口,这个 ...