news 2026/10/15 14:48:53

Java+TestNG+Maven+Selenium的web自动化测试脚本环境的搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java+TestNG+Maven+Selenium的web自动化测试脚本环境的搭建

一、环境搭建

1、安装java环境

a、 安装JDK

b、安装eclipse

c、安装maven

参考:http://www.cnblogs.com/s1328/p/4620812.html

2、安装eclipse下的testng插件

Eclipse中点击Help->Install new software -> 点击Add

在Location输入 http://beust.com/eclipse

选中Testng版本,点击Next,按照提示安装,安装完之后重启Eclipse

3、安装firefox插件

a、fireBug插件,帮你定位页面元素

b、firePath插件,可以直接告诉你页面元素的Xpath

下面需要在Eclipse里为我们要做的web自动化测试创建一个Eclipse工程

你需要按照File - New - Project - Maven - Maven Project来创建Maven工程

这里为了简单起见,你可以直接去GitHub拿我创建好的工程

https://github.com/zhangting85/simpleWebtest
不会用GitHub的同学只要打开这个连接然后点击Download ZIP这个按钮就可以下载到创建好的工程源代码。

然后在Eclipse里按照File - Import… - Maven - Existing Maven Projects来导入刚刚下载的源代码。

工程结构详解:

一个最简单的标准maven工程,源代码放在src/main/java目录下,测试代码放在src/test/java目录下;

maven还创建了一个pom.xml,负责替你管理所有这个工程所依赖的jar包。

<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>simple-webtest</groupId> <artifactId>simple-webtest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>simple-webtest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.5</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.40.0</version> </dependency> </dependencies> </project>

上面的2.40.0中间是版本号,如果selenium要从2.40升级到2.41了,我们只需要改这里的版本号。不用再去官网下载jar包了。

是不是很方便?

4. 检查环境是否准备完毕

在Eclipse里刚刚导入的工程里,找到simpleWebtest.test包下的TestWebdriverEnv.java文件。

右键 - Run as - TestNG Test

如果前面步骤均安装正确,你将看到selenium打开了你的Firefox浏览器,并跳转到我的GitHub工程所在页面。

命令行里会输出Hello World, TestNG

此外,testNG还会在你的工程目录下创建test-output目录,里面存放着默认的testNG测试报告。

好。至此一个selenium的脚本开发环境就搭好了。

以上测试代码只使用了firefox,如果你想创建chrome、ie的测试脚本,

还需要下载对应的driver文件并把这些文件放在你系统的环境变量path里。

比如,ie的driver文件是IEDriverServer.exe。有需求的朋友就去官网下载吧。

二、编写简单线性脚本

1、自动化测试原理

自动化测试,一般分三个步骤:

1)取预期结果;

2)取实际结果;

3)断言:比较1)和2)来判断测试是否通过;

2、简单的selenium测试脚本编写,一般也是分三个步骤:

1)定位一个元素

2)操作一个元素

3)断言

这里用百度首页的搜索做一个例子:

package simplewebtest.test; 2 3 import java.util.concurrent.TimeUnit; 4 5 import org.openqa.selenium.By; 6 import org.openqa.selenium.WebDriver; 7 import org.openqa.selenium.firefox.FirefoxDriver; 8 import org.testng.annotations.Test; 9 10 public class TestBaiduHome { 11 12 @Test 13 public void searchSomething(){ 14 15 WebDriver driver=new FirefoxDriver();//打开Firefox; open firefox 16 driver.get("http://www.baidu.com");//打开百度open the url 17 driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword 18 driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button 19 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds 20 String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四条搜索结果的标题。 get the text of 4th search result 21 assert aResult.contains("GitHub");//做断言 assertion 22 driver.findElement(By.xpath(".//*[@id='4']/h3/a")).click();//打开第四个搜索结果。Open the 4th search result on baidu 23 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时。waiting for 10 seconds 24 25 //获取所有窗口的handle,然后逐个切换,直到切换到最新窗口 switch to the new window 26 for(String winHandle : driver.getWindowHandles()){ 27 driver.switchTo().window(winHandle); 28 } 29 30 String aTitle=driver.getTitle();//取新窗口的title 31 System.out.println("current widnow title is:"+aTitle);//打出来看看 32 assert aTitle.contains("GitHub");//断言 33 34 } 35 }

下面逐行解释:

WebDriver driver=new FirefoxDriver();

这里是声明了一个 WebDriver 类型的对象引用,我给他起名叫driver;

然后让这个driver指向WebDriver的一个子类(FirefoxDriver)的对象;

我们知道FirefoxDriver继承自WebDriver,IEDriver也继承自WebDriver;

就像苹果继承自水果,橘子也继承自水果;

这里用了Java的向上转型,使用子类的对象来初始化父类的引用。(注:实际上Webdriver是一个接口。)

这将产生什么效果呢?

我们在driver上调用方法的时候,都是先查找WebDriver里的方法定义,然后jvm去他的子类比如FirfoxDriver中找到其在子类中的实现,再执行的。比如FirefoxDriver的get方法和IEDriver的get方法,他们具体执行的代码内容明显是不一样的。但我们的脚本,只要改变driver引用的子类,而不用改变我后面的方法调用。

也就是说,我们用firefox和用ie,除了第一句话新建对象时不一样,后面的方法调用都是一样的。

java会自动根据我们上面这句话里创建的对象,去选择他应该执行的实际代码。

这也就是JAVA里的多态,一句话记住多态:用子类对象初始化父类引用,方法调用时自动执行子类代码,成员变量调用时自动调用父类成员变量。

以上,题外话略多,是希望测试人员不要自我放弃,写个程序不会有多难,Java的基础必须要掌握。

driver.get("http://www.baidu.com");

调用Webdriver的get方法,跳转到制定的URL;

凡是这里跳转不过去的,十有八九是因为webdriver版本太低,浏览器版本太高,请改上一节讲的pom.xml里配置的webdriver版本号至最新版。

driver.findElement(By.id("kw1")).sendKeys("GitHub");//输入搜索关键字“GitHub";input search keyword driver.findElement(By.id("su1")).click();//点击搜索按钮click the search button

这里调用Webdriver的findElement方法来查找页面元素。然后在找到的页面元素WebElement对象上调用sendKeys方法来打字和click方法来点击。

如果你问我这个id的值是怎么来的,那么你可以去看一下FireBug这个插件,他会替你找到每一个元素的一切属性。

如果你要定位的元素没有id,你还可以用className,Xpath,css,等等来定位。

另一个插件FirePath可以帮你产生任意元素的xpath表达式。

定位xPath的方法参考:http://www.cnblogs.com/s1328/p/4931145.html

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

很常用的一个等待页面加载的语句。这个implicityWait是会对driver的下一个findElement调用起作用的。

百度这个搜索结果页面很有意思,虽然我们感觉不出来,但搜索结果其实是异步显示上去的,所以不加等待他就会找不到元素。

而后面点击搜索结果打开一个窗口的时候我们再次用了等待。

另外,这个方法并不是对所有网页都有效,有时我们要用一些别的等待。还有尽量不要用Thread.sleep

String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四条搜索结果的标题。 get the text of 4th search result assert aResult.contains("GitHub");//做断言 assertion

这两句,首先去取实际结果,也就是根据某个xpath表达式找到的搜索结果元素上的Text

然后,再判断他是否符合预期结果,即包含有“GitHub”这个字符串。

assert是TestNG提供的,这里不要用if else去判断这个字符串。TestNG的assert结果会反映在测试报告里。

也不要自己去抛出一个代表断言失败的异常,TestNG会替你完成这件事。

以上两个错误是中低级开发人员编写测试框架时常犯的。

我们既然用了TestNG,请至少尝试去用TestNG的功能。

for(String winHandle : driver.getWindowHandles()){ driver.switchTo().window(winHandle); }

这段代码表示切换窗口。有意思的是,他是在窗口打开后,先取出所有窗口的hanles,然后一个一个切过去。

因为新窗口必定在最后,所以不论你有几个窗口,这段代码总能找到最新一个窗口。如果你还需要操作老窗口,

可以事先把老窗口的Handle保存起来,以后再切回来。

以上一个简单的线性测试脚本编写完毕。基本的元素定位、元素操作、窗口切换、断言都有了,你可以查看官网的文档,了解各个api的更多方法。

熟练地编写线性脚本大概需要个把月,有编程基础的更快,这一篇介绍的内容基本没有难度。下一篇介绍进阶的线性脚本,包括frame,actions,关闭浏览器,运行javascript,WebDriverWait。

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

​视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 15:09:01

超级Mini小车功能说明

巴掌车模01 超Mini小车功能说明1. 按键说明 小车左侧按键为启动按键&#xff0c;启动时需小车前方传感器处于背景布上(自动校准传感器数据)&#xff0c;启动后小车会自行往前移动&#xff0c;若遇到赛道(白色胶带)&#xff0c;则会沿着赛道行驶。 小车右侧为关机按键&#xff…

作者头像 李华
网站建设 2026/10/12 22:18:04

STC32G12单片机替换成STC32F12单片机,直接替换的结果

简 介&#xff1a; 本文测试了STC32F12单片机替换STC32G12单片机的可行性。实验表明&#xff0c;虽然两款单片机管脚兼容&#xff0c;但32F12增加了硬件数学运算单元。测试发现&#xff0c;直接下载32G12程序无法运行&#xff0c;需重新编译工程。使用硬件数学运算后&#xff0…

作者头像 李华
网站建设 2026/10/15 16:08:39

SIEMENS 6SL3210-1PE33-0CL0 变频器

常见故障及解决方法‌通信故障‌‌原因‌&#xff1a;通信线路松动、参数设置错误&#xff08;如波特率、设备名称不匹配&#xff09;或接口损坏。‌解决‌&#xff1a;检查线路连接&#xff0c;核对参数一致性&#xff0c;更换损坏接口。‌过流/过压/欠压‌‌过流‌&#xff1…

作者头像 李华
网站建设 2026/10/14 14:05:20

软件测试常用的7种方法,最后一个是升职加薪关键!(零基础小白转行IT互联网高效进阶)

一般而言&#xff0c;软件测试方法分为黑盒测试、白盒测试、灰盒测试、静态测试、动态测试、手动测试、自动化测试和探索性测试等类型。 【1】黑盒测试 黑盒测试又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。该测试方法验证被测对象使用质量及外部质量表现。 …

作者头像 李华
网站建设 2026/10/15 6:49:21

【RTOS】EasyLog的移植与使用

当前log的突出问题&#xff1a; ①log不方便定位到源程序所在位置 ②log不分主次&#xff0c;比较难生成想要的信息 1. 彩色log 1.1 编译器内置宏&#xff1a;__FILE__,__LINE__ led1下直接打印出当前文件的行号和名字 led2复制粘贴过来&#xff0c;改一下引脚 实验现象 哎…

作者头像 李华