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文件
报告展示如下:
邮件展示如下:
日志文件展示如下: