• 0
  • 0
分享
  • selenium:解决页面元素display:none的方法
  • 恬恬圈 2022-07-21 15:23:20 字数 1213 阅读 2419 收藏 0

在UI自动化测试中,有时候会遇到页面元素无法定位的问题,包括xpath等方法都无法定位,是因为前端元素被设置为不可见导致。

这篇博客,介绍下如何通过JavaScript修改页面元素属性来定位的方法。。。

1、具体问题

常见的页面元素不可见导致的不可定位,都是由于下面的问题:

1.png

通过查看相关文档,可以看出display:none方法是设置元素不可见,这就是导致为什么通过定位页面元素无法定位的原因。

2.png

关于display更多的信息,可以看这里:HTML DOM display用法

2、解决方案

对于这种问题,可以通过JavaScript修改页面元素属性来将元素置位可见,然后通过id、classname等方法去定位,示例代码如下(针对上图所示):

js = "document.getElementById(\"txtPassword\").style.display='block';"
# 调用js脚本
driver.execute_script(js)
sleep(3)
driver.find_element_by_id("txtPassword").send_keys("123456")

代码解析:

首先通过selenium封装好的方法document去找到display元素,document提供以下方法来定位display元素:

getElementById():返回对指定ID第一个对象的引用

getElementsByName() :返回带有指定名称的对象集合

getElementsByTagName():返回带有指定标签名的对象集合

3.png

关于document更多的信息,可以看这里:HTML DOM getElement()方法

上面我定义了一个js变量,然后通过getElementById()方法去引用display元素,修改none属性为block属性(作为块级元素显示),然后通过selenium自带的execute_script方法执行脚本。

最后,当元素属性置为可见时,可以通过ID去定位元素。 

其实还有一个解决方案:让前端修改display:none为block就好了,但这样的话,带来的变化和安全风险又是需要考虑的问题。一个问题的解决总是伴随着新的问题,核裂变了解一下?

想起今天和同行聊天时说起的分裂BUG的话题,对话如下:

大佬N:核裂变的原理是通过中子撞击原子核产生多个新的原子核,原子核是已有的BUG,中子是修改BUG加上的代码,分裂之后这个bug消失了,取而代之的是更多的原子核(BUG)。

我:引起一个BUG的原因可能是多个,修改一段代码可能造成多个BUG,就像用新技术解决旧问题而带来的新问题一个意思。

自动化本身最大的挑战还是变化,因此从分层测试角度结合公司项目具体情况,考虑解决问题的方法,才是最好的选择。


作者:老_张

原文链接:https://www.cnblogs.com/imyalost/p/8948458.html

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 作为一个电商项目,势必会包含优惠券这一模块,今天就来分析一下它,这篇的测试分析主要是针对后台,移动端的稍后我会再单独整理一篇分析优惠券的测试点我主要从三方面入手:发布前、发布中、发布后;发布前:首先我们先分析一下这个页面,得到以下测试点:整体的优惠券分为三部分:(1) 优惠券管理—优惠券领取记录—优惠券使用记录:(2) 测试点:当鼠标滑过时 按钮是否发生状态改变(按钮常亮),(3) 测试点:当鼠标点击时 右侧是否联动相关页面优惠券管理:(按钮的滑过/悬停、点击时、点击后状态根据产品原型进行测试)(1) 测试点:点击控制台是否能够正确跳转至控制台页面(2) 测试点:刷新按钮 点击时下方优惠券列表...
            1 1 4442
            分享
          • 软件测试是软件生存周期中必不可少的环节,软件的典型生存周期可以用下图来形容:软件测试的目的是尽可能早的发现软件缺陷并确保其得以修复,因此软件测试是提高软件质量的重要手段,大量的经验实践证明,软件测试越早参与到软件开发过程中,开发出来的软件质量相对越高,时间和物力也越经济。根据软件工程的基本理论,多模块程序的测试共包括以下4个层次:各阶段测试的具体内容会在以后章节具体介绍,下面介绍一下软件测试的经典技术。软件测试的经典技术分为黑盒测试和白盒测试技术。其中黑盒测试技术忽略程序内部结构,看不到程序的代码细节,只针对程序的功能进行测试,黑盒测试的方法有:具体方法会在以后章节中具体介绍,敬请期待。说完黑...
            11 11 2768
            分享
          •   产品经理可以参考下图的流程方法:  1)需求收集:包括被动和主动的需求收集,其中主动的需求收集要求掌握需求收集的途径和方法,产品创意需要统一纳入到需求收集的范围;  2)需求分析:通过需求分析的层级模型,透彻地分析需求背后的用户问题和痛点,用户的需求场景,必要时还需要通过一些简单的原型确保准确地理解用户需求;  3)需求分发:不是所有需求都要纳入到下一个产品版本,成熟的需求管理团队能够发现高价值的中长期需求,在需求分发环节将其纳入到产品规划;  4)需求实现:该阶段的责任主体是产品开发团队,产品经理需要确保产品开发的各个阶段没有偏离自己的产品概念;  5)需求验证:包括产品经理对产品的验证...
            0 0 934
            分享
          • 单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和自动化测试工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西。但是作为一个优秀的测试人员,写好测试代码可以彰显你的实力。如此多的框架和工具,很容易让人困惑,困惑的原因是因为并没有理解它的基本原理,如果一些基本的概念都不清...
            11 11 1603
            分享
          •   作为与欧洲监管机构建立良好关系的持续努力的一部分,TikTok表示该公司已开始斥资120亿欧元着手建设之前宣布的挪威数据中心。过去几年来,这家短视频社交公司一直在努力让全世界相信,它并不受制于其在中国的母公司字节跳动公司(ByteDance),而去年揭露的中国员工可以访问欧洲和美国用户数据的事件也让这一努力变得阻力重重。  不过,TikTok 已经做出了一系列承诺,努力消除人们对其根据欧洲《数字服务法案》(DSA)使用数据的担忧。这些承诺被捆绑在一个名为"四叶草项目"的计划中,其中包括在欧洲开设本地数据中心,并引入新的数据访问和控制流程。  该公司承诺的 120 亿欧元...
            0 0 1218
            分享
      • 51testing软件测试圈微信