• 0
  • 0
分享
  • selenium:解决页面元素display:none的方法
  • 恬恬圈 2022-07-21 15:23:20 字数 1213 阅读 2216 收藏 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   性能测试框架搭建+接口测试+渗透测试+测试开发+测试面试指南,点击下方链接填写测试行业调查问卷,任选两个带回家。链接:http://vote.51testing.com/  Jenkins作为目前持续集成中使用较为广泛的工具,在实际生产过程中通过结合众多的插件,从而实现工程的持续构建、持续部署。  而传统构建的应用场景大多数运行在虚拟机或者独立的服务器上,在资源开销和管理维护较为复杂。相比于独立的服务器/虚拟机而言,容器不仅部署方便,且占用资源较少。  Docker作为目前作为业内最火的一个容器解决方案之一,通过将两者结合,从而实现服务的轻量化,并通过Docker管理Jenkins的资源。...
            1 1 1842
            分享
          •   苹果公司将于近期发布的 iOS 17.1 更新解决了一个"可能导致显示屏烧屏"的问题。自 iPhone 15 机型发布以来,一直有零星报道称新设备出现严重的屏幕烧毁现象。有人猜测可能是 OLED 显示屏的硬件问题,但根据 iOS 17.1 更新,苹果发现并解决了这个问题。  虽然大多数显示屏问题的报告都来自 iPhone15 用户,但也有一些使用 iPhone 13 Pro 和 iPhone 12 Pro 设备的用户出现了类似问题,这很可能就是为什么苹果的发布说明没有特别提及 iPhone 15 的原因。  那些发现 iPhone 出现"烧屏"问题的...
            0 0 1001
            分享
          •   日前,沃尔沃首款纯电MPV车型沃尔沃EM90的谍照在网上曝光。据悉,这款特供车将采用和极氪009相同的SEA浩瀚架构,车身长度可能超过5.2米。计划于今年第三季度亮相并投产上市,成为沃尔沃90车系的第四款车型。  根据谍照可以看出,新车外观与极氪009有诸多相似之处,如雷神之锤轮廓的LED大灯组和镀铬饰条点缀的封闭式进气格栅。车身侧面包括悬浮式车顶造型、双层镂空的A柱和C柱的转折点造型以及充电口位置等细节与极氪009几乎一致。然而,由于伪装措施严实,尾部设计等细节尚不清晰可见。  动力方面,沃尔沃EM90将采用纯电驱动系统,可能与EX90采用相同的动力配置:低功率版电机最大功率407马力,...
            0 0 651
            分享
          • 说到探索式软件测试(简称为ET,Exploratory Testing)或者探索性测试,很多的测试人员并不陌生。几年前,这个词在测试行业比较热门,而目前热门的应该算自动化测试了。   但自动化测试有一个致命的弱点,就是“预言家难题”-- 意思是如何才能知道被测试软件确实完成了它应该完成的任务,预言如何才能精准无任何差错。机器毕竟不是人,它只能按照固定的步骤来执行计算、判断,例如自动化运行中途出现:操作系统升级重启、机器断网、浏览器故障重启了、页面刷新较慢元素在该有的时间内没出现、HTTP丢包等任何一些不稳定现象,自动化的流程就很容易崩溃并最终需要人的介入。过度依赖自动...
            2 2 2573
            分享
          • 想查看小程序的请求,使用wireshark捣鼓了半天还是无法解析微信小程序的HTTPS协议,于是使用Fiddler试试。Tools --> Options重启 Fiddler点击右边的 Filter 选项卡。然后点击 Actions --> Run Filterset Now接着点开PC微信小程序,就能看到请求列表。双击右边某一行即可展开详细信息显示请求的时间在左侧的列表区域头部任意栏上鼠标右键,选择 Customize Columns,然后Add,就会多出一列时间。需要注意的是,Fiddler 如果异常退出的话,会导致浏...
            0 0 3170
            分享
      • 51testing软件测试圈微信