ITPub博客

首页 > 自动化运维 > 大规模网络运维 > 大佬答疑解惑丨进行Web自动化测试,为什么总是定位不到元素?

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

原创 大规模网络运维 作者:博为峰网校 时间:2021-01-11 17:57:13 0 删除 编辑

     一、写在前面

      本文讨论的基础,是基于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将是你调试路上的好帮手!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31407649/viewspace-2749136/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于软件测试干货分享&资料下载,加ww-51testing,备注“IT”即可领取哦~~

注册时间:2016-11-02

  • 博文量
    277
  • 访问量
    293402