Java+Maven+selenium+testing+reportNG自动化测试框架
一直在用的webUI自动化测试框架,以前写得太粗糙了,现在细化一下。
weiUI自动化测试需要掌握以下几点:一是获取元素,java获取元素对象与python差不多,用的是findElement方法,不过我在搭建框架过程中为了实现PO模式,从万能的百度中获知还有个一更好的类FindBy,FindBy+PageFactory可以完美实现PO模式。二是测试框架,junit和testNG都是java方面的主流测试框架,这两个框架我都没有用过,不能比较二者优劣,不过看现在各公司的招聘要求基本都是写着要会testNG,所以选择testNG作为测试框架应该不会错。三是测试报告的展示,尝试过后,发现测试报告还是reportNG比testNG的原生测试报告好看,所以决定用reportNG代替testNG生成测试报告。最后就是项目的构建了,很久以前我也是用过maven的,觉得这个东西还是满好用的,所以框架中也加上吧。下面就一个个说一下我的代码结构。
以下是配置文件POM.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>myTest</groupId>
<artifactId>mytest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>mytest</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.14.2</version>
<scope>test</scope>
</dependency>
<!-- 加入reportNG依赖,代替testNG测试报告 -->
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 加入selenium做webUI测试,选用selenium2 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.53.1</version>
</dependency>
<!-- 依赖Guice -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 加入maven-surefire-plugin插件用来使用maven执行用例,其中suiteXmlFile配置的就是testNG用例执行文件的地址 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/java/myTest/mytest/testNG.xml</suiteXmlFile>
</suiteXmlFiles>
<!-- 加入编码设置,否则生成的报告会中文乱码 -->
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
<!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
<property>
<name>listener</name>
<value>org.uncommons.reportng.HTMLReporter</value>
</property>
</properties>
<workingDirectory>target/</workingDirectory>
<!-- <forkMode>always</forkMode> -->
</configuration>
</plugin>
</plugins>
</build> </project>
接下来是代码实现,根据以往经验,UI自动化测试很容易出现找到不对象的情况,所以在操作之前必须判断对象是否存在,java和python一样有隐式等待和显式等待,我选择使用更加稳妥的显式等待。Java显式等待使用的是WebDriverWait+ExpectedConditions,使用方式如下:
|
new WebDriverWait(driver,10).until( ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))); |
也就是说要在定位元素的时候加入这两个类作为等待条件,直到目标元素出现为止。但是如果每一个元素都这么写的话就有很多冗余代码了,所以我写了个公共类BasePage.java,重写了click事件和sendkeys事件,代码如下:
/**
* @author:Helen
* @date:2018年4月7日
* @Description: 处理页面元素公共类,重写页面操作事件,为每个元素加入显式等待
*/
package myTest.mytest; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait; public class BasePage {
WebDriver driver;
private final int timeOut = 10;//等待时间 public BasePage(WebDriver driver) {
// TODO Auto-generated constructor stub
this.driver = driver;
} /* 重写senkeys方法 */
void sendkeys(WebElement element, String s) {
new WebDriverWait(driver, timeOut).until(ExpectedConditions.visibilityOf(element));// 加入显式等待
element.clear();// 先清空输入框
element.sendKeys(s);// 输入数据
} /* 重写click方法 */
void click(WebElement element) {
new WebDriverWait(driver, timeOut).until(ExpectedConditions.visibilityOf(element));// 加入显式等待
element.click();
}
}
接下来就是实现页面对象获取了,下面以百度页面为示例
/**
* @author:Helen
* @date:2018年4月7日
* @Description: 百度页面,对象定位和操作,继承BasePage
*/
package myTest.mytest; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy; public class MyPage extends BasePage{
public MyPage(WebDriver driver) {
super(driver);
// TODO Auto-generated constructor stub
} //关键词输入框
@FindBy(id="kw")
private WebElement kw_Element; //“搜索”按钮
@FindBy(id="su")
private WebElement su_Element; //输入关键词
public void kw_sendkes(String s){
this.sendkeys(kw_Element, s);
} //点击“搜索”按钮
public void su_click() {
this.click(su_Element);
} }
接下来是写测试业务内容,加载页面的时候加入PageFactory,代码如下:
/**
* @author:Helen
* @date:2018年4月7日
* @Description: 百度搜索测试
*/
package myTest.mytest; import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
import org.testng.Assert;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory; public class myTestNg {
private WebDriver driver = new FirefoxDriver(); @Test
public void baidu_search() {
MyPage myPage = PageFactory.initElements(driver, MyPage.class);
driver.get("https://www.baidu.com");
driver.manage().window().maximize();//窗口最大化
myPage.kw_sendkes("helenMemery");
myPage.su_click();
} @Test
public void f2() {
Assert.assertEquals("b", "b");
} @AfterMethod
public void close(){
//driver.close();
} }
最后是配置testNG.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="百度搜索">
<test name="搜索业务">
<classes>
<class name="myTest.mytest.NewTest"></class>
<class name="myTest.mytest.myTestNg"></class>
</classes>
</test>
</suite>
接下来就是执行测试了,选中pom.xml右键-Run As-maven test

最后生成HTML 测试报告,如下图所示:


最后剩下来的就是配置jenkins了,这个以后再写下来吧。
Java+Maven+selenium+testing+reportNG自动化测试框架的更多相关文章
- 杂项-自动化测试工具:Selenium(浏览器自动化测试框架)
ylbtech-杂项-自动化测试工具:Selenium(浏览器自动化测试框架) Selenium 是一个用于Web 应用程序测试的工具.Selenium 测试直接运行在浏览器中,就像真正的用户在操作一 ...
- 基于Java+Selenium的WebUI自动化测试框架(十四)-----使用TestNG的Sample
到目前为止,我们所写的东西,都是集中在如何使用Selenium和Java来定位和读取元素.那么,到底如何具体开展测试,如何实现参数化,如何实现判定呢?下面,我们来看看Java应用程序的测试框架吧. 当 ...
- 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器
对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...
- 基于Java+Selenium的WebUI自动化测试框架(八)-----读取元素(XML文件)
我们继续回到自动化测试框架的主线上来,在前面的文章中,我们定义一个页面元素的主要参数有:路径,找寻方式,等待时间,名称,这个四个参数.另外,我们还需要考虑一个问题,就是网站的页面. 举个例子来说,如果 ...
- Selenium WebDriver + python 自动化测试框架
目标 组内任何人都可以进行自动化测试用例的编写 完全分离测试用例和自动化测试代码,就像写手工测试用例一下,编写excel格式的测试用例,包括步骤.检查点,然后执行自动化工程,即可执行功能自动化测试用例 ...
- 基于Java+Selenium的WebUI自动化测试框架(六)---浏览器初始化
本篇我们来讨论,如何写一个浏览器初始化的类.在写之前,先思考一下,我们需要一个什么样的初始化? 先来看看使用原生的Java + selenium是怎么做的.(以firefox为例) System.se ...
- 基于Java+Selenium的WebUI自动化测试框架(五)------页面操作实现类
在编写完Log类和监听类之后,终于要回到正轨上来了.我们继续开始写UIExcutor的实现类. PS:如果你想让你的报告更加美观一些.推荐使用reportNG这个jar包. 在项目中导入reportn ...
- 基于Java+Selenium的WebUI自动化测试框架(十三)-----基础页面类BasePage(Excel)
前面,我们讲了如何使用POI进行Excel的“按需读取”.根据前面我们写的BasePageX,我们可以很轻松的写出来基于这个“按需读取”的BasePage. package webui.xUtils; ...
- 基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)
之前,我们使用了读取XML文件的方式来实现页面元素的读取,并做成了基础页面类.下面,我们来进行一些扩展,通过Excel来读取页面元素. Excel的使用,大多数人应该都不陌生.那么Java读取Exce ...
随机推荐
- git本地项目关联远程仓库
应用场景: 当你在开发一个项目的时候,不想只在本地存储,想用git来管理代码时候的. 1.在你的项目根目录打开git命令窗口,通过 git init 命令把这个目录变成Git可以管理的仓库: git ...
- Java实现mongodb原生增删改查语句
Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...
- ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理
对于一个应用来说界面的重要性无言而喻,而Web应用的界面是使用Html+Css以及Javascript实现的,ASP.NET MVC是一个用来构建Web应用的框架,它的界面也是Html实现的,对于一些 ...
- oled
gnd.vcc.clk.miso.rst.mosi.cs
- 设计模式——抽象工厂模式(C++实现)
#include <iostream> #include <string> using namespace std; class STAbstractProductA { pu ...
- cxGrid_Q31584 cxgrid 拖放移动记录
cxgrid 拖放移动记录,cxgrid 拖放,cxgrid 拖动记录,cxgrid 鼠标拖动记录 这是cxgrid开发公司回复客户时所发送的源码项目,用于实现鼠标拖动记录,改变记录在表格中的位置,所 ...
- Y2K问题
关于第五章 团队和流程 2.6 特工团队中所提到的Y2K问题,第一次接触到这个名词去百度了,它的意思是这样的:year 2K problem,又称千年虫问题.主要原因是早期的软件大多以两位数字来记录年 ...
- Zabbix常用key和自定义key的讲解
zabbix中常用到的几个key: 1.监控端口的:net.tcp.port[,3306],可以在服务器端对被监控端测试. /usr/local/zabbix/bin/ -s192.168.8.120 ...
- linux --> 获取系统启动时间
获取系统启动时间 一.前言 时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同.linux内核里面用一个名为jiffes的常量来计算时间戳.应用层有time.getdaytim ...
- Eclipse中的所有快捷键列表
Eclipse中的所有快捷键列表: Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制 ...