1,首先是对于 selenium 的封装,毕竟直接使用 selenium 的 api 对于后期脚本的维护以及测试脚本的稳定性控制都是坑
封装的策略非常粗暴,如下:
public void sendkeys(WebElement we, String key){
for(int i = 1; i <= RETRY_TIME; i++){
try{
we.sendKeys(key);
break;
}
catch(Exception e){
LogUtil.warn("Sendkeys to WebElement Failed, Retry (" + i + "/" + RETRY_TIME + ") Times After " + RETRY_WAIT + "Seconds");
SysUtil.sleep(RETRY_WAIT);
if(i == RETRY_TIME){
throw e;
}
}
}
}
每个动作如果出错,重复尝试 RETRY_TIME,两次之间的间隔是 RETRY_WAIT
这两个参数都是全局的,是配置到配置文件中的。
其他 api 采用类似的方法。
2,testng 的接口监听封装
主要是对于 onTestStart,onTestFailure,onTestSkipped,onTestSuccess 这些函数进行 overwrite
3,测试报告,采用的是记录测试步骤,测试步骤详情和测试步骤结果,并最终汇聚单个测试用例结果的方式
4,元素定位剥离
使用 yaml 的方式按照模块统一管理 xpath,id,name 等等
然后使用 ymal 解析包,进行二次封装,网上这种方式还算是比较流行
5,gradle 控制脚本的运行及其与 jenkins 的结合
使用 gradle clean test -Pbrowser="firefox"这种方式将目标浏览器传入到 java 中
然后 java 使用 System.getProperty 的方式获取用户设定,去构建相应的浏览器 driver
最后在 jenkins master 中创建 job,采用定时触发的机制,使得脚本能够分别运行在 chrome firefox,ie 和 safari 上面
目前这个方法有一个不好的地方在于,我在 jenkins master 中需要分别构建四个 job
我感觉这四个 job 之间的重复性很大,应该是可以合并成一个或者两个 (windows 和 mac)
只是暂时没有想出更好的办法来,大家如果有什么建议,请留言。
如果似懂不懂,似是而非,请免开尊口。