龙空技术网

大佬答疑解惑丨进行Web自动化测试,为什么总是定位不到元素?

Atstudy网校 134

前言:

眼前小伙伴们对“selenium中如何去定位web页面上动态加载的元素”都比较注重,各位老铁们都想要了解一些“selenium中如何去定位web页面上动态加载的元素”的相关知识。那么小编也在网上汇集了一些有关“selenium中如何去定位web页面上动态加载的元素””的相关知识,希望你们能喜欢,大家一起来了解一下吧!

一、写在前面

本文讨论的基础,是基于Robotframework(简称RF)+Selenium测试框架的Web前端自动化测试。针对Robotframework和Selenium的安装、使用等基础知识不做介绍,只讨论在进行自动化脚本编写过程中遇到的元素定位失败问题。

  二、但是你不得不了解的事

  RF框架在做前端自动化时,支持的元素定位方式有:css定位、id定位、name定位、xpath定位和js定位。在介绍如何使用这几种方法之前,你不得不认识并熟悉我们Web测试的基础工具(客户端)——浏览器。

  以Chrome浏览器为例,Chrome的开发者工具栏的Elements面板,提供了用户捕捉前端元素及获取元素定位的方法。如下图1所示,打开Chrome开发工具的Elements面板,点击最左侧的箭头(图中1),在界面点击关键字搜索框(图中2),即可获取搜索框的元素(图中3)html文本:

  "<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">"

  在该html文本处右键点击,并点击Copy按钮(图中4),即可见Chrome关于该搜索框元素定位的几种方式:selector、Xpath、JS path。

  如图1例中,selector的值为"#kw";Xpath的值为"//*[@id="kw"]";JS path的值为"document.querySelector("#kw")"。

  selector提供了css或id或name的元素定位方式,Xpath提供了xpath相对路径的元素定位方式。使用selector和Xpath,结合RF Selenium2Library的Click Element、Click Button、Checkbox Should Be Selected等关键字使用,即可定位元素进行点击、判断等操作。除此外,RF还提供js定位方式,结合Chrome的JS Path和RF的Execute JavaScript关键字,即可完成对元素的操作。

图1 chrome开发工具获取元素定位

  三、你可能不知道的事

  尽管使用过"02"中的几种定位方式,能够捕捉到大部分元素,但是现实往往不是那么尽善尽美,你可能还是遇到了下面几个问题:

  1、自动化脚本编写好,测试通过了,但是过几天回归测试就失败,元素找不到?

  在这里,只能建议你:请确认你所使用的定位方式是唯一不变的。例如,避免使用"//*[@id="9134245532398"]"这类包含动态id的xpath定位方式。有的前端设计某些元素的id为随机数,每次刷新都会更改,切记勿用这类随机变换的标识做元素识别。元素定位只有一个标准:唯一性,推荐id和name优先。

  2、元素处于frame框架嵌套中,即使获取到了正确的定位路径,测试脚本运行仍然失败?

  请记住,处于frame框架中的元素,你需要先切换进frame(RF的 select frame关键字试一试,会有惊喜),再进行元素定位。好比你远远地看到一扇玻璃窗里有个熟人,你大声跟他说话,他却无动于衷。这个时候,你需要走进这扇玻璃窗的门里,因为,玻璃窗是隔音的,你的呼喊门里的人听不见。

  3、如何操作被遮挡的元素?

  针对这类情况,也许你尝试了id、name、css和xpath等定位方法,结果都失败了。也不存在2中所说的frame切换,不要灰心,试试js定位操作吧。使用RF的execute javascript配合JS path直接操作被遮挡元素,百试不爽。

  4、如何处理新开tab页或新开窗口后的元素操作?

  同02方法类似,将当前操作的窗口切换到新开的窗口或tab页,再结合chrom的元素定位路径对元素进行操作,RF的select window值得尝试。

  5、定位没问题,点击按钮有显示被点中的样式,但是就是没效果?

  元素定位正确,使用click button和click element点击元素都,也无报错,就是没反应,那就试试press key按钮吧。

  6、自动化测试脚本运行太快,页面还没加载出来,元素找不到?

  这个时候,没有其他办法,只能设置等待时间或者使用RF的Element Should Be Visible这类关键字判断元素已经在页面可见或可用后,在进行操作。

  四、告诉你一个大事情

  如果你遇到的问题,"03"中的方法都不能解决,那么……打印源码吧。

  RF的get source关键字,将会告诉你,你当前操作的页面,所有html文本,按图索骥,根据你的定位方式是否真的能在当前页面中找到你定位的元素。get source将是你调试路上的好帮手!

请关注+私信回复:“测试”就可以免费拿到软件测试学习资料。

标签: #selenium中如何去定位web页面上动态加载的元素 #selenium定位不到元素的原因