新手区 selenium 问题请教

kawa · 2017年04月06日 · 最后由 huj 回复于 2017年04月07日 · 2026 次阅读

业务是这样的:前台发布公告,后台对这个公告进行审核。
如果这一流程要实现自动化,后台对怎么在列表中准确定位到这个公告呢。
目前是通过搜索公告名称得出搜索列表中只有这一个公告,再对这个公告定位。但是这种方法依赖与页面的搜索功能,如果页面没有搜索功能怎么办呢?如何在一个多数据列表中定位到自己想要的数据元素?

—— 来自 TesterHome 官方 安卓客户端

共收到 14 条回复 时间 点赞

找唯一属性

kawa #3 · 2017年04月06日 Author
古丶月 回复

不同的列表项只有公告 id 是不同的,但是公告 id 是发布的时候产生的。selenium 能定位公告 id 么?而且有类似于 loadrunner 关联的功能不?

找标题可否?
前台发布的公告标题存起来,在后台功能列表中,查找该标题,第一个找到的即为刚发布的公告

审核页面,如果 ID 为随机数,可以通过其他方式定位,比如 html 中其他属性,name,tagname,class,如果公告是列表形式,审核和未审核页面元素是有差异的吧?通过 xpath 取得未审核行的所有元素,通过循环遍历取得所有值,之后进一步操作取得内容,应该没有问题!

后台列表的 id,一般都是随机数,不能作为定位标准; 直接确定并定位最新公告位置

后台列表,一般都是顺序排列(倒叙):
若存在排序:

  1. 公告列表中,可以定位第一位 或 最后一位(最新公告)

若无排序:

  1. 前台发布的公告,内容固定;
  2. 前台发布成功后,后台公告列表 -- 根据公告内容搜索关键字,即可定位
kawa #6 · 2017年04月07日 Author
撞树桐 回复

我采用的也是使用公告标题进行查找,但依赖于列表的搜索功能。请问你说的查找是采用什么样的方式?

kawa #7 · 2017年04月07日 Author
tSu 回复

可以取得未审核的所有元素,但是怎么进一步操作取得内容,求详解?

kawa #8 · 2017年04月07日 Author
arkin 回复

最开始采用的是利用排序定位元素,但是考虑到 xpath 有局限性舍弃了。现在采用的是你说的无排序的方法。但是觉得还是不太好,想改进一下,自动化萌新一枚,想实现类似于 loadrunner 通过 id 等关联的功能,但是没有思路。

kawa 回复

每行元素取得后,你要做什么操作呢?不是审核吗?审核是需要点击按钮还是干嘛呢?这是你用例场景后续要做的事情了,如果是需要点击每行的审核按钮,直接继续 for 循环一遍列值,取得审核按钮元素的值,点击按钮就可以进行操作了。

kawa 回复

简单的列表新增数据定位,按照列表排序,定位最新一条 ----- 使用 xpath/css 语法, 功能验证就可以;
可以优化语法捕获绝对值定位,css 语法很好用;
比较麻烦些,直接调接口,捕获绝对值(例:新增时间),然后页面直接定位;

ps: 直接调接口测也可以;

读取数据库,这样就可以拿到任何你需要的数据,那么公告 id 不就可以拿到了。

很多 selenium 的自动化用例 需要配合数据的读取。

kawa 回复

selenium 的 By.linkText() 或 By.partialLinkText()?

大致是:
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 循环取得未审核的然后再获取未审核的属性再去点击审核

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册