最近工做中,有大量web页面上的重复操做,实在麻烦,就想利用selenium ide录制出一些操做集合,以便复用。新版本的selenium ide 3目前只支持firefox最新的版本,并且代码导出功能还不完备,就想试试旧版本2.7。为了能使用2.7版本,还安装了旧版本的火狐浏览器。弄好后,发现不太好用,录制起来很不顺手。因而就想找找替代方案。搜到了两个结果,一是kantu,另一个是katalon recorder。我以为katalon recorder很顺手,也的确为我省了很多事,做一下简单记录。html
katalon recorder是基于selenium的浏览器插件,支持火狐和chrome。它能够录制web页面的操做,而且能实现基本的数据驱动测试,还能导入脚本,可说是体量虽小,功能足够。对功能有更高要求的,还能够去试试同出一门的katalon studio,也是免费软件,支持web和mobile端的测试,并集成了许多强大的功能。jquery
安装后界面以下:git
建立test suite后,里面能够包含多个测试用例(test case),每一个测试用例又有若干步骤(command)。点击record,能够快速对当前的活动页面进行录制,点击pllay则是回放。web自动化测试费时费力的一部分就是元素定位,录制正是解决这一问题的利器。录制完成后,点击右上角的export,还能够导出不一样语言的代码,方便进行下一步的开发。github
每一个测试步骤分为三部分,分别是coommand,target和value。录制后,能够本身看看命令是什么样子的,也能够选择元素的定位方式,避免默认的定位方式没法在其它页面复用(好比换了登陆用户,经过登陆用户名文原本定位显然就没法复用了)。web
官方有提供sample suite,包含了recorder的各个功能,能够下载导入后查看。chrome
1.页面上有一些input输入框,在本身测试时一般是输入固定的值,因而就想能不能录制下来,省些力气。浏览器
首先用了录制功能,但发现一直无效。查看步骤,发现是定位到input后,以type方法键入值。ide
如图:工具
因而我想到能不能模拟本身实际操做的步骤,来键入值呢?也就是使用sendKeys方法,键入想用的值后,按下Enter键,再点击页面空白处。测试
这样作,的确是值能输进去,可是再操做时,值又会自动消失。查了一圈后,以为应该是输入框要有input或者change事件发生时,才会更改绑定的值。
Katalon Recorder支持js脚本,也试试这个吧。(jquery有段时间没用,又稍稍回忆了下,彻底忘了对jquery对象取第0个元素就是原生DOM对象,卡了一小会儿)
代码以下:
$('#product_list_table2 > tbody').find('td:nth-child(2) > input').each( function(){ $(this)[0].value = '100'; })
因为要输入的值在表格中,只要遍历表格的子元素,找到输入框,改变其值便可。
成了吗?是写进去了,但同样去操做其余地方值又会变为原来的值。
又查了一番,应该再改变值后把input或change事件触发才行,代码以下:
$('#product_list_table2 > tbody').find('td:nth-child(2) > input').each( function(){ $(this)[0].value = '100'; this.dispatchEvent(new Event('change')); })
// 不知道为何,这里触发input事件没用,必需要触发change事件才行。而另一些input却得绑定input事件,有些不解
再进一步,能够把要输入的值参数化,在脚本中以${param}引入便可。如图:
之后再须要对input输入值的地方,均可以用相似的方法处理。
2.又用了一段时间,发现仍是有场景能够实现自动化。比方说,有一个订单,须要四层审批,每级审批的人都不同,但经过管理员查看流程,均可以切换到相应的角色。
因而就把流程录制了下,拿另一个订单试验了下,果真没那么容易就能够。主要有几个小问题:
1)找订单时,是根据位置定位的,一直点击的是列表中的第一个。对于新订单倒还好,可是若是要审批旧单子,这个方法就行不通了
2)有些点击动做太快。页面元素并非一下全都加载好的,单纯以元素出现判断是否点击,并不可靠。
3)若以审批人分类,每一个审批人都要单独录一遍流程,太过麻烦
4)页面上根据订单金额不一样,会出现不一样的弹框。不点击的话,就没法继续。
为了让录制的脚本更加灵活,我作了如下调整:
1)参数化。将订单号存储起来,每次再也不是点击订单列表的第一个,而是先进行搜索,出现结果时,再点击第一个,这样就能够保证进入想要审批的订单。
另外也将审批人参数化,这样就避免重复录制,更灵活也更省事。
可以使用store方法,target是要存储的值,value是参数名。以后要应用,能够${param}的形式引用。
2)增长暂停。在一些数据交互多的页面中增长暂停时间,好比加载订单、搜索这些场景都应当添加,让脚本更稳定。时长从500毫秒到1500毫秒不等。
可以使用pause方法,target为要暂停的时间,单位是毫秒。
3)增长元素是否存在的判断。对于不是任什么时候候都出现的弹框,可先判断其是否存在,是则点击,不然跳过,让脚本更灵活。
Katalon Recorder中并不能简单使用if判断,由于if只能更布尔表达式。这也是简易工具的限制,但也是其它方式实现。
我用的方法是先用storeElementPresent方法,判断元素是否存在,存入变量中,再放到if的布尔表达式中,中间放入要执行的语句。
至此脚本就修改完成了,使用起来也很稳定,填入参数后,再也不须要人工干预。
到这一步,再往下走,能够将几个审批人的流程合并到test suite,这样一次点击,全部审批流程均可以完成。
每一个测试用例都有隐含的第一步,就是跳转到katalon的主页,导出代码后,就会里面设置的base url是katalon主页。每次执行都会先跳转到这个页面,而后才会往下走,会耽搁一小会儿。目前尚未找到设置base url的地方,解决方法是加载主页几秒后,中止加载,就会跳转到本身设定的页面。
参考
katalon主页:https://www.katalon.com/
katalon文档:https://docs.katalon.com/katalon-studio/docs/index.html
sample suite下载页面: https://github.com/katalon-studio/katalon-recorder-samples