• 13
  • 14
分享
  • Web自动化测试,为什么总是定位不到元素?——软件测试圈
  • 曼倩诙谐 2021-01-11 10:28:36 字数 2007 阅读 2261 收藏 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   总结和整理  很多同学会觉得,我平时也就根据业务需求啊,做完一个接着一个,哪有什么好总结的。或者是,需求分析、测试设计、性能测试就是这样做的啊,大家都清楚,哪有什么好分享的。对测试工程师来说,总结和整理很重要。不论是大项目还是小需求,项目中踩坑地点、某个公共的测试方法、业务流程、甚至是一个棘手问题的解决过程等都可以记录下来。对自己而言,通过总结大家能发现自己做的好和做的不好的点,加深印象,了解自己的知识体系,对不足之处制定改进计划并定期跟进,才能不断进步;对他人而言,学习他人的经验也是一种成长的方式,同时避免下次有同学踩同样的坑;对公司而言,有详细的业务和技术文档可以降低大家的学习成本和犯...
            0 0 862
            分享
          •   前两天有个做测试的小伙伴加我微信问我测试相关的一些事情。  她自己是从学习毕业就开始进入到互联网行业做测试的,到现在三年工作经验。她现在都不太敢跳槽,因为觉得自己没有什么核心竞争力,平常就是点点鼠标,看看有没有报错、结果和需求是否相符这样。  其实很多测试人员的处境都是如此。  造成这个局面的原因可以找到很多,大家经常会说的借口是:工作太忙,没时间也没精力。其实你自己去看看手机记录的屏幕使用时间。你平时有花里面30%的时间用来提升自己吗?  测试相比开发的工作门槛和天花板都低一些,这也导致了一些想进入软件开发行业但是又对自己掌握开发能力没信心的人所做出的保守选择。  但是如果后续自己并没有...
            0 0 1204
            分享
          •   即使毛利率和利润大幅下滑,特斯拉也将继续降价追求销量,并将今年的交付目标定在200万辆。  特斯拉尝降价“恶果”,一季度利润暴跌20%,但丝毫没有动摇特斯拉追求销量的决心,价格战可能将持续下去。  对于投资者最关注的“毛利率和利润大幅下滑,不及预期,会不会影响后续定价策略”,马斯克在财报发布后的电话会中给出了否定答案。  马斯克明确表态,车辆成本正在降低之中,特斯拉将继续调整车辆价格,追求销量而不是利润率。特斯拉CFO表示,特斯拉按每周一次的频率评估车辆价格。  4月19日周三美股盘后,特斯拉公布了2023年第一季度财报,由于报告期内特斯拉在全球主要市场轮番大幅降价,导致营收虽同比增超20...
            0 0 799
            分享
          • 前言本文主要是记录Pycharm创建支持appium模块的项目时,如何安装Appium-Python-Client以及通过一个简单的脚本实现自动点击操作的过程。步骤1.创建python项目使用Pycharm新建一个项目,这里取名test,如下图创建完以后,会自动生成一些文件,如下图:2.添加Appium-Python-Client2.1 打开Settings对话框在项目的菜单中选择File->Settgings(或者直接按快捷键Ctrl+Alt+S)2.2 安装Appium-Python-Client选择Project:test(test为项目名,不同项目不一样)下的Project In...
            13 13 2638
            分享
          •   一、背景  随着各类应用快速和多样化的发展,产品迭代更换频繁,导致业务需求旺盛,开发测试任务源源不断。项目团队通过采取测试分层策略、测试数据治理、自动化回归、性能测试等一系列举措确保系统的安全生产。然而,通过调研发现,投产运行后的缺陷90%以上为性能问题,为我们敲响了性能警钟。为此,项目团队探索打破以项目维度开展性能测试的壁垒,按系统维度进行性能周期性检测,尽可能模拟系统生产运行模式,检验特定情况下是否会有系统级性能问题,降低系统投产的性能风险。  二、探索实践  性能周期性检测实践从性能测试环境建设、性能测试范围选取、测试脚本集准备、性能测试场景设置、性能测试结果对比分析及调优几个维度逐...
            1 1 2532
            分享
      • 51testing软件测试圈微信