业务是这样的:前台发布公告,后台对这个公告进行审核。
如果这一流程要实现自动化,后台对怎么在列表中准确定位到这个公告呢。
目前是通过搜索公告名称得出搜索列表中只有这一个公告,再对这个公告定位。但是这种方法依赖与页面的搜索功能,如果页面没有搜索功能怎么办呢?如何在一个多数据列表中定位到自己想要的数据元素?
—— 来自 TesterHome 官方 安卓客户端
找唯一属性
不同的列表项只有公告 id 是不同的,但是公告 id 是发布的时候产生的。selenium 能定位公告 id 么?而且有类似于 loadrunner 关联的功能不?
找标题可否?
前台发布的公告标题存起来,在后台功能列表中,查找该标题,第一个找到的即为刚发布的公告
审核页面,如果 ID 为随机数,可以通过其他方式定位,比如 html 中其他属性,name,tagname,class,如果公告是列表形式,审核和未审核页面元素是有差异的吧?通过 xpath 取得未审核行的所有元素,通过循环遍历取得所有值,之后进一步操作取得内容,应该没有问题!
后台列表的 id,一般都是随机数,不能作为定位标准; 直接确定并定位最新公告位置
后台列表,一般都是顺序排列(倒叙):
若存在排序:
若无排序:
最开始采用的是利用排序定位元素,但是考虑到 xpath 有局限性舍弃了。现在采用的是你说的无排序的方法。但是觉得还是不太好,想改进一下,自动化萌新一枚,想实现类似于 loadrunner 通过 id 等关联的功能,但是没有思路。
每行元素取得后,你要做什么操作呢?不是审核吗?审核是需要点击按钮还是干嘛呢?这是你用例场景后续要做的事情了,如果是需要点击每行的审核按钮,直接继续 for 循环一遍列值,取得审核按钮元素的值,点击按钮就可以进行操作了。
简单的列表新增数据定位,按照列表排序,定位最新一条 ----- 使用 xpath/css 语法, 功能验证就可以;
可以优化语法捕获绝对值定位,css 语法很好用;
比较麻烦些,直接调接口,捕获绝对值(例:新增时间),然后页面直接定位;
ps: 直接调接口测也可以;
读取数据库,这样就可以拿到任何你需要的数据,那么公告 id 不就可以拿到了。
很多 selenium 的自动化用例 需要配合数据的读取。
大致是:
List rows = driver.findElements(By.xpath("//"));获取行
for(WebElement row:rows){
List cols 同上获取列
if 判断 (cols.getText().equals("")=审核元素值时
cols.click 并 break.
}
接住弹出 alert 或者 message
再接后续场景动作...
用页面抓取的话,操作大概就是这样了!
如果 xpath 不太熟练,那就最直接的方法,xpath 直接将当前页面表格的所有元素通过 tr 和 td 取出,再判断是否有未审核的元素,
如果不是这样的那就考虑接口或者直接读数据库。
使用 for 循环取得未审核的然后再获取未审核的属性再去点击审核