#PatatiumWebUi
<h1>简介</h1>
**这是一个webui自动化测试框架,由<a href="http://www.webdriver.org">webdriver中文社区</a>创办人土豆(本人技术笔名)所创建,该web自动化测试框架是用java语言编写的,基于selenium webdriver 的开源自动化测试框架,该框架结合了testng,selenium,webdriver,jxl,jodd-http 等工具。该框架基于页面对象模型(POM)模型架构,实现了关键字驱动技术,数据驱动,无需掌握多少编程知识即可编写脚本,同时实现了数据与代码分离的功能:1、元素定位信息保存在对象库文件中 2、测试用例数据可以存储在excel中。从而实现,页面元素位置变化,无需改动脚本,只需修改对应的元素定位信息即可。
目前框架还不是特别完善,还需要写一些脚本实现自动化;学习该框架需要熟悉一定的HTML 和java基础,后续可以考虑自动编码的实现。**
<h1>环境配置</h1>
1、jdk 1.8
2、idea/eclipse
3、maven
<h1>Demo演示</h1>
<h2>1、对象库文件编写(文件名定义为UILibrary.xml)</h2>
```
<?xml version="1.0" encoding="UTF-8"?>
<!--整个对象库文件的根目录,管理整个项目的对象-->
<map>
<!--管理一个页面的元素(webelement:input,select,textare,a,li等标签),一个page包含多个locator对象
Pagename:page对象名字,格式:net.hk515.PageObject.xxxPage;最后面那位才是真正的页面名字,前面的是java对象库路径;
另外注意,页面名字是头个单词大写;例如主页:名字定义为 net.hk515.PageObject.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代码
<h2>2、公共action封装实例(业务操作)</h2>
```
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 包下
<h2>3、驱动数据来源实例</h2>
1、在src/main/resources/data下创建loginData.xml文件
编写如下内容

<h2>4、测试用例编写</h2>
普通测试用例:
```
@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_8456195","输入正确的用户名和密码,验证是否成功进入主页");
//设置用例断言,判断用例是否失败
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 包下
<h2>5、testng.xml配置</h2>
```
<?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="登录失败测试用例:数据驱动"> <!--