基于selenium webdriver的一个web自动化测试框架PatatiumWebUi

PatatiumWebUi

简介

这是一个webui自动化测试框架,由webdriver中文社区创办人土豆(本人技术笔名)所创建,该web自动化测试框架是用java语言编写的,基于selenium webdriver 的开源自动化测试框架,该框架结合了testng,selenium,webdriver,jxl,jodd-http 等工具。该框架基于页面对象模型(POM)模型架构,实现了关键字驱动技术,数据驱动,无需掌握多少编程知识即可编写脚本,同时实现了数据与代码分离的功能:1、元素定位信息保存在对象库文件中 2、测试用例数据可以存储在excel中。从而实现,页面元素位置变化,无需改动脚本,只需修改对应的元素定位信息即可。
目前框架还不是特别完善,还需要写一些脚本实现自动化;学习该框架需要熟悉一定的HTML 和java基础,后续可以考虑自动编码的实现。

环境配置

1、jdk 1.8
2、idea/eclipse
3、maven

Demo演示

1、对象库文件编写(文件名定义为UILibrary.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!--整个对象库文件的根目录,管理整个项目的对象-->
<map>
    <!--管理一个页面的元素(webelement:input,select,textare,a,li等标签),一个page包含多个locator对象
    Pagename:page对象名字,格式:org.webdriver.patatiumwebui.PageObject.xxxPage;最后面那位才是真正的页面名字,前面的是java对象库路径;另外注意,页面名字是头个单词大写;例如主页:名字定义为 org.webdriver.patatiumwebui.HomePage
    Value:页面对象的URL,可不填。
    Desc:页面对象中文描述-->
    <page pagename="org.webdriver.patatiumwebui.pageObject.LoginPage" value="" desc="京东登录页面">
        <!--管理一个页面的元素(webelement:input,select,textare,a,li等标签),一个page包含多个locator对象
        Type:定位方式,包含id,name,class,linktext,xpath,css等,定位元素的时候灵活使用,一般可以统一用xpath
        代替id,name,class,linktext的定位方式。
        Timeout:元素加载时间,有些页面元素,可能要等待一段时间才能加载过来,为了查找元素的稳定性,需加等待时间。
        Value:元素定位信息,如果是id,name,class,linktext直接把网页元素对应的这些属性值写上即可,如果是xpath定位方式,
        需要填写正确的xpath语法格式。
        Desc:元素的描述,元素的中文描述信息-->
        <locator type="xpath" timeout="3" value="//input[@id='loginname']"  desc="用户名">用户名输入框</locator>
        <locator type="id" timeout="3" value="nloginpwd"  desc="密码">密码输入框</locator>
        <locator type="id" timeout="3" value="loginsubmit"  desc="登录">登录按钮</locator>
    </page>
</map>

对象库文件编写后,运行/src/main/java/org/webdriver/patatiumwebui/PageObjectConfig/PageObjectAutoCode.java 文件生成对象库java代码

2、公共action封装实例(业务操作)

package org.webdriver.patatiumwebui.action;

import org.webdriver.patatiumwebui.pageObject.LoginPage;
import org.webdriver.patatiumwebui.utils.ElementAction;
import org.webdriver.patatiumwebui.utils.TestBaseCase;

import java.io.IOException;

/**
 * Created by zhengshuheng on 2016/8/29 0029.
 */
public class LoginAction extends TestBaseCase{
    public LoginAction(String Url,String UserName,String PassWord) throws IOException
    {
        //此driver变量继承自TestBase变量
        LoginPage loginPage=new LoginPage();
        loginPage.open(Url);
        System.out.println(driver.getCurrentUrl());
        ElementAction action=new ElementAction();
        action.clear(loginPage.密码输入框());
        action.type(loginPage.用户名输入框(),UserName);
        action.clear(loginPage.密码输入框());
        action.type(loginPage.密码输入框(),PassWord);
        action.click(loginPage.登录按钮());
    }
}

公共Action代码放在src/main/java/org/webdriver/patatiumwebui/Action 包下

3、驱动数据来源实例

1、在src/main/resources/data下创建loginData.xls文件
编写如下内容
输入图片说明

4、测试用例编写

普通测试用例:

@Test(description="登录成功测试")
    @Parameters({"BaseUrl"})//读取testng.xml参数
    public void login(String BaseUrl) throws IOException
    {
        //调用登录方法,需输入正确的用户名和密码
        LoginAction loginAction=new LoginAction(BaseUrl+"/new/login.aspx","11111","abc123");
        action.sleep(2);
        //设置检查点
        Assertion.VerityTextPresentPrecision("jd_1111","输入正确的用户名和密码,验证是否成功进入主页");
        //设置用例断言,判断用例是否失败
        Assertion.VerityError();
    }

数据驱动测试用例:

//数据驱动案例--start
    @DataProvider(name="longinData")
    public Object[][] loginData()
    {
        //读取登录用例测试数据
        String filePath="src/main/resources/data/loginData.xls";
        //读取第一个sheet,第2行到第5行-第2到第4列之间的数据
        return ExcelReadUtil.case_data_excel(0, 1, 4, 1, 3,filePath);
    }
    @Test(description="登录失败用例",dataProvider = "longinData")
    public void loginFail (String userName,String password,String message) throws IOException, DocumentException {
        //代替testng参数化的方法
        String BaseUrl= XmlReadUtil.getTestngParametersValue("testng.xml","BaseUrl");
        //调用登录方法
        LoginAction loginAction=new LoginAction(BaseUrl+"/new/login.aspx",userName,password);
        action.sleep(1);
        //设置检查点
        Assertion.VerityTextPresent(message,"验证是否出现预期的错误提示信息:"+message);
        //设置断言
        Assertion.VerityError();
    }
    //数据驱动案例--end

测试用例代码放在src/test/java 包下

5、testng.xml配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" >
    <parameter name="driver" value="FirefoxDriver" /> <!--测试浏览器:支持火狐,谷歌,IE-->
    <parameter name="nodeURL" value="" /> <!--selenium grid分布式运行node节点url,如不用分布式运行,则留空-->
    <parameter name="BaseUrl" value="https://passport.jd.com" />  <!-- 测试系统基础Url-->
    <parameter name="UserName" value="" /> <!-- 系统登录用户名-->
    <parameter name="PassWord" value="" />  <!-- 系统登录密码-->
    <parameter name="smtpUserName" value="" />  <!-- 测试报告邮件发送:smtp身份证验证-->
    <parameter name="smtpPassWord" value="" />  <!-- 测试报告邮件发送:smtp身份证验证-->
    <parameter name="smtpHost" value="" />  <!-- 测试报告邮件发送:smtp主机地址-->
    <parameter name="smtpPort" value="" />  <!-- 测试报告邮件发送:smtp主机端口-->
    <parameter name="mailTitle" value="Webdriver中文社区-自动化测试报告" />  <!-- 测试报告邮件发送:邮件标题-->
    <parameter name="logUrl" value="" />  <!-- 测试报告邮件发送:用例运行日志url-->
    <parameter name="reportUrl" value="" />  <!-- 测试报告邮件发送:完整测试报告url-->
    <parameter name="recipients" value="" /> <!-- 测试报告邮件发送:收件人,多个用,号隔开-->
    <parameter name="reportTitle" value="Webdriver中文社区-自动化测试报告" />  <!--测试报告标题-->
    <listeners><!-- 监听器设置-->
        <listener class-name="org.webdriver.patatiumwebui.utils.TestListener"></listener>
        <listener class-name="org.webdriver.patatiumwebui.utils.TestReport"></listener>
    </listeners>
     <test name="登录失败测试用例:数据驱动"> <!-- 测试用例描述-->
    <classes>
      <class name="LoginTest">
             <methods >
                   <include name="loginFail" />
             </methods>
       </class>
    </classes>
  </test> <!-- Test -->
    <test name="登录成功测试用例">
        <classes>
            <class name="LoginTest">
                <methods >
                    <include name="login" />
                </methods>
            </class>
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

testng.xml放在项目根目录下面。

6、执行用例

IDE:在IDE集成开发环境下右键testng.xml使用testng运行
Maven:执行mvn clean ;mvn test 命令
Jenkins:1、checkout 项目代码 2、指定pom.xml文件 3、执行mvn clean ;mvn test 命令

7、查看测试报告及日志文件

用例执行完毕,会自动发送邮件报告及生成测试报告文件
测试报告文件生成在项目根目录下test-out目录下report.html文件
报告展示如下:
输入图片说明
邮件展示如下:
输入图片说明
日志文件展示如下:
输入图片说明

源码地址:https://git.oschina.net/zhengshuheng/PatatiumWebUi

转载于:https://my.oschina.net/zhengshuheng/blog/740431

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值