• 13
  • 14
分享
  • Web自动化测试,为什么总是定位不到元素?——软件测试圈
  • 曼倩诙谐 2021-01-11 10:28:36 字数 2007 阅读 2099 收藏 14

  一、写在前面

  本文讨论的基础,是基于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.png

图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将是你调试路上的好帮手!



作者:刘晓佳   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   艺术家们起诉人工智能艺术生成器,在一场首开先河的诉讼中遇到了绊脚石,联邦法官驳回了大多数索赔要求,原告认为这些生成器未经授权使用从互联网上下载的数十亿张图片来训练人工智能系统,且未支付任何报酬。  美国联邦地区法官威廉-奥瑞克(William Orrick)周一认定,针对 Midjourney 和 DeviantArt 的版权侵权索赔无法继续进行,并认为这些指控"在许多方面存在缺陷"。其中的问题包括:它们所运行的人工智能系统是否真的包含用于创作侵权作品的受版权保护的图片副本,以及在人工智能工具没有创作出相同材料的情况下,艺术家们能否证实侵权行为。针对两家公司的侵权、公开...
            0 0 882
            分享
          • 读者提问:APP 兼容性测试怎么做 ?阿常回答:分为三步走:1、选取主流机型+版本;2、对主流机型做功能验证;3、选一款机型做网络兼容测试。一、选取主流机型 + 版本选取 TOP 机型+版本的几种途径:1、采用埋点的方式获取 APP 相关数据2、采用云测平台推荐的 TOP 机型+版本3、采用行业内统计的国内主流机型排行二、主流机型的功能验证选好主流机型,接着就是对每一款主流机型进行全功能验证。注意:如果 APP 需要使用到蓝牙、相册等手机自带功能,需要考虑软件与不同机型的蓝牙、相册等手机自带功能的兼容性。三、一款机型做网络测试挑选其中一款主流机型来做网络的兼容性测试。覆盖网...
            0 0 1219
            分享
          • 在日常的编写SQL中,我们都会遇到一些自以为很简单实际却又不怎么熟练的内置函数,虽然我们不一定都用的上,但是要用上的时候我们得知道。为了记录最近遇到的坑,决定把它以场景模式记录下来,方便日后使用,也是一次记忆的加深场景1:当你sql查询出来的字段没有值,或者为null时,做数据分析时,这些个为null的字段会造成很大的困扰,所以我们需要给可能出现null的字段添加一个默认值,这个时候SQL的内置函数IFNULL()与COALESCE() 就能很好的满足我们的需求 IFNULL() 函数作用: IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返...
            0 3 2560
            分享
          •   分析师 Ross Young 今天发布新一期报告,认为苹果公司将在 6 月开启 iPhone 16 系列手机的面板生产,与此前 iPhone 15 的生产周期计划表相同,这意味着 iPhone 16 依然遵循苹果公司“祖训”—— 在 9 月中旬发布。  对于 iPhone 16 系列四款机型,Young 表示,预计 iPhone 16 和 16 Pro 的销量最高,16 Plus 和 16 Pro Max 需求量可能一开始不高,但在明年夏季左右会有所增加,这是因为夏季到来时人们会需要更高的手机续航。  参考IT之家此前报道,先前有媒体分享了苹果 iPhone 16 系列四款机型的机模照片,...
            0 0 365
            分享
          • 知识永远学不完,但多懂一点知识就会让生活更轻松一点!又是元气满满的一天呐。微信/支付宝/小程序测试大全小程序测试环境小程序一般会准备三个环境:开发版访问测试环境;体验版访问预发环境,连的是生产的地址,白名单人员可见;正式版访问生产环境,所有人可见;共同点是:体验版和正式版都是生产环境的数据;不同点是:体验版只有加入白名单的人可见,正式版就是所有用户可见。小程序测试注意点:更新版本后最好杀一下微信/支付宝进程,不然有可能拿不到微信/支付宝信息,导致有些功能报错;小程序跳转层级有限制,最好每次测试页面都试一下3-5层的跳转,看需求对应改进;考虑有蒙层的场景下,关闭蒙层之后,button是否失去焦点...
            12 14 2440
            分享
      • 51testing软件测试圈微信