|
Selenium+TestNG+SVN+Jenkins体验
最近有时间可以学习,所以学习了一下用Selenium+testNG做网页自动化的流程,SVN管理代码,用Jenkins来持续集成。简单记录一下免得以后忘记了。
1.用Maven创建工程,为了可以自动下载包,很方便。可以直接在maven repository中找你要的包,然后把
截图的内容 粘贴到pom.xml文件中,工程就会自动下载所需要的jar包。
2.根据下面PO(Page-Object)模型,写代码,对于一个代码没有基础的人,so痛苦。。。
PO
- 公共库模块
- 可复用方法
- 日志管理
- 等等。。
- 页面管理
- 单独对Web页面进行抽象、封装页面元素和操作方法
- 用例仓库
下面是我的简陋代码(初学者的作品,莫笑啊):
- util包,负责抽象出可复用的类、方法,比如kill进程、获取日期、获取随机数,初始化log对象、键盘操作、截图操作,封装cookie、WebDeiver对浏览器和window的一下操作等等
- data包,负责写dataProvider中的一些测试数据(这都静态的,后面会说用excel中的数据做数据驱动)。
- config包,负责读取配置文件,利用Property的getProperty方法来获取key对应的value值。Driver管理针对不同driver,启动前的设置。
- page包,对Web页面进行封装,包括页面元素和操作方法
- business包,对对应页面的逻辑进行封装
- case包,不同页面中可以有多个case
先说一说用到的一些jar包吧
Testng、selenium、log4j、Feed4TestNG相关包,后面因为需要用ant来调用testng.xml所以还用到了ant的包,为了美化报告,用了testng-xslt-1.1.2.zip解压出来的saxon-8.7.jar 和 SaxonLiason.jar 等等 很多很多。。。
接下来重点记录一下遇到的问题吧:
a) 上传文件--------可以sendkeys、键盘模拟、或者用autoit编译出exe
b) iframe太多了
driver.switchTo().frame(Int index); //传入参数为frame的序号,从0开始
driver.switchTo().frame(String nameOrId); //传入参数为frame的ID或者Name属性
driver.switchTo().parentFrame(); //切换回父级 –高版本selenium可用
driver.switchTo().defaultContent(); //切换回默认
c) 弹出的window太多了,需要切换driver. getWindowHandles() ,然后循环处理
d) 处理对话框(alert/confirm/prompt)
e) 处理表格,可以拼接xpath
f) 处理富文本框
// 富文本编辑框的处理
driver.switchTo().frame("ueditor_0"); //定位到富文本输入框所在的frame
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.body.innerHTML='ABCDEFG'"); //通过js赋值进去
g) 处理Cookie(有时为了不依赖登录的用例,我们可以吧登录后的cookie添加进去,然后就可以操作登录后的页面了)
h) 等待
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //推荐使用
- Thread.sleep() //浪费时间,弊端多
i) 截图
File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenShotFile, new File("C:/test.png"));
j) JavaScript
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
Selenium可以执行js脚本
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“xxxxxxxxxxxxxxxxxxxxxxxx”)
//设置日期控件的读写属性
document.getElementById(\"fromDate\").readOnly=false
//f富文本编辑框的处理
document.body.innerHTML='ABCDEFG'
//js模拟点击
js.executeScript("arguments[0].click();",driver.findElement(By.id("su")));
//滚动条操作
document.documentElement.scrollTop=1500
//元素赋值
document.getElementById('HD_CheckIn').value='zhangsan';
//日期类型元素赋值
js.executeScript("arguments[0] .value=‘2016-04-20’;",driver.findElement(By*****)));
接下来写一下TestNG,还是多多看一看官方文档吧
- TestNG的注解Annotation
- 查看官方文档吧http://testng.org/doc/documentation-main.html#annotations
- TestNG的断言Assert
- 运行testNG
- Eclipse中直接右键选择TestNG运行
- 编写ant的xml文件
- 命令行
- 运行结果
- Eclipse中的testng插件中可以直接查看
- Ant中自定义的报告输入目录
- Jenkins中的TestNG Results Plugin
- ReRun failed test
- dataProvider
查看Feed4j的官网http://databene.org/feed4testng.html
@Test(dataProvider = "feeder", enabled = true)
@Source("testdata/com/cases/YYHX_HomeTest.xls")
查看TestNG官网
@Test(dataProvider="LoginFail",dataProviderClass = YYHX_HomeTestData.class,enabled = false)
接下来用ant来写一下build.xml 来调用testNG.xml吧
编译所有java文件
执行testNG.xml
美化报告
接下来,使用SVN和Jenkins来持续运行我的low代码,哈哈
- 安装Subversion也可以用visual SVN
- 创建版本控制库
- C:\repos\source1(路径随意哈)
- 在source1目录上点击鼠标右键,选择TortoiseSVN->在此创建版本库
- 配置版本库,如果用的visual SVN更简单,就是设置权限,创建user和group
source1\conf\svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = My First Repository
source1\conf\passwd
[users]
test = test
source1\conf\authz
[groups]
all = test
[source1:/]
test = rw
- 导入托管文件
- 配置svnservice服务,并启动
- 将SVNService.exe拷贝到SVN服务端(Subversion)安装路径的BIN目录下
- Cmd下运行命令:svnservice -install -d -r C:\repos
安装Jenkins,并在浏览器用http://localhost:8080 打开jenkins
- 注册admin用户
- 安全配置
- 设置环境变量JDK 、Ant
- 安装插件testng-plugin
- 创建项目环境
- 配置项目
- Source Code管理

- Build环境 使用ant,并设置build.xml文件

- Apply
- 点击立即构建,查看控制台信息就可以看到在build文件中定义的target的任务的执行情况。
|
|
|