博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
阅读量:4284 次
发布时间:2019-05-27

本文共 5635 字,大约阅读时间需要 18 分钟。

转自:

最近公司新出了一个产品,需要搭建自动化测试框架,这是一个学以至用的好机会,跟上级申请后,决定搭建一个java自动化测试框架。

Java自动化测试对我来讲可以说不难不易,因为java是我大学在校四年学的主要开发语言,但是毕业这么多年没写了难免生疏。

weiUI自动化测试需要掌握以下几点:一是获取元素,java获取元素对象与python差不多,用的是findElement方法,不过我在搭建框架过程中为了实现PO模式,从万能的百度中获知还有个一更好的类FindBy,FindBy+PageFactory可以完美实现PO模式。二是测试框架,junit和testNG都是java方面的主流测试框架,这两个框架我都没有用过,不能比较二者优劣,不过看现在各公司的招聘要求基本都是写着要会testNG,所以选择testNG作为测试框架应该不会错。三是测试报告的展示,尝试过后,发现测试报告还是reportNG比testNG的原生测试报告好看,所以决定用reportNG代替testNG生成测试报告。最后就是项目的构建了,很久以前我也是用过maven的,觉得这个东西还是满好用的,所以框架中也加上吧。下面就一个个说一下我的代码结构。

以下是配置文件POM.xml,各依赖关系下面已经注析清楚。

复制代码

4.0.0
myTest
mytest
0.0.1-SNAPSHOT
jar
mytest
http://maven.apache.org
UTF-8
org.testng
testng
6.14.2
test
org.uncommons
reportng
1.1.4
test
org.testng
testng
org.seleniumhq.selenium
selenium-java
2.53.1
com.google.inject
guice
3.0
test
org.apache.maven.plugins
maven-surefire-plugin
2.21.0
src/test/java/myTest/mytest/testNG.xml
-Dfile.encoding=UTF-8
org.apache.maven.plugins
maven-surefire-plugin
2.5
usedefaultlisteners
false
listener
org.uncommons.reportng.HTMLReporter
target/

复制代码

 

接下来是代码实现,根据以往经验,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文件,内容如下:

复制代码

复制代码

 

接下来就是执行测试了,选中pom.xml右键-Run As-maven test

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

 

转载地址:http://eungi.baihongyu.com/

你可能感兴趣的文章
mtd and /dev/mtd*相關資料
查看>>
cp: cannot create symbolic link to fat format of usb: Operation not permitted
查看>>
MTD bad Block issue
查看>>
How to change network interface name
查看>>
ubifs and ubi and mtd
查看>>
shell script set 用法
查看>>
英文序數寫法與唸法 Ordinal Numbers(轉載)
查看>>
DVB-S info
查看>>
绿盟扫描操作指导
查看>>
理解链路本地址与站点本地地址
查看>>
/proc/mtd 各个参数含义 -- linux内核
查看>>
linux nand flash常用命令
查看>>
NESSUS扫描操作指导
查看>>
C语言读取文件大小,载入文件全部内容
查看>>
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>
C语言 文件操作的头文件
查看>>
C语言的常用库函数(dos)之四(dir.h文件下的一些函数)
查看>>
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
查看>>
防火墙报文转发流程
查看>>