selenium:解决页面元素display:none的方法
在UI自动化测试中,有时候会遇到页面元素无法定位的问题,包括xpath等方法都无法定位,是因为前端元素被设置为不可见导致。
这篇博客,介绍下如何通过JavaScript修改页面元素属性来定位的方法。。。
1、具体问题
常见的页面元素不可见导致的不可定位,都是由于下面的问题:

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

关于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("")
代码解析:
首先通过selenium封装好的方法document去找到display元素,document提供以下方法来定位display元素:
getElementById():返回对指定ID第一个对象的引用
getElementsByName() :返回带有指定名称的对象集合
getElementsByTagName():返回带有指定标签名的对象集合

关于document更多的信息,可以看这里:HTML DOM getElement()方法
上面我定义了一个js变量,然后通过getElementById()方法去引用display元素,修改none属性为block属性(作为块级元素显示),然后通过selenium自带的execute_script方法执行脚本。
最后,当元素属性置为可见时,可以通过ID去定位元素。
其实还有一个解决方案:让前端修改display:none为block就好了,但这样的话,带来的变化和安全风险又是需要考虑的问题。一个问题的解决总是伴随着新的问题,核裂变了解一下?
想起今天和同行聊天时说起的分裂BUG的话题,对话如下:
大佬N:核裂变的原理是通过中子撞击原子核产生多个新的原子核,原子核是已有的BUG,中子是修改BUG加上的代码,分裂之后这个bug消失了,取而代之的是更多的原子核(BUG)。。。
我:引起一个BUG的原因可能是多个,修改一段代码可能造成多个BUG,就像用新技术解决旧问题而带来的新问题一个意思。。。
自动化本身最大的挑战还是变化,因此从分层测试角度结合公司项目具体情况,考虑解决问题的方法,才是最好的选择。
selenium:解决页面元素display:none的方法的更多相关文章
- Selenium解决页面元素不在视野范围内的问题
当需要使用滚动条才能使页面元素显示在视野范围内时,必须用代码处理下,才能对其进行操作. 处理其实也很简单,就是调用JS函数. driver.executeScript("arguments[ ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- 用 CSS 隐藏页面元素的 5 种方法
原文链接:用 CSS 隐藏页面元素的 5 种方法,转载请注明来源! 用 CSS 隐藏页面元素有许多种方法.你可以将 opacity 设为 0.将 visibility 设为 hidden.将 disp ...
- CSS 隐藏页面元素的 几 种方法总结
用 CSS 隐藏页面元素有许多种方法.你可以将 opacity 设为 0.将 visibility 设为 hidden.将 display 设为 none 或者将 position 设为 absolu ...
- 转:jquery 父、子页面之间页面元素的获取,方法的调用
一.jQuery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- jquery 父、子页面之间页面元素的获取,方法的调用
一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- 利用PIL和Selenium实现页面元素截图
预备 照张相片 selenium.webdriver可以实现对显示页面的截图: from selenium import webdriver dr = webdriver.Firefox() dr.g ...
- selenium定位页面元素的一件趣事
PS:本博客selenium分类不会记载selenium打开浏览器,定位元素,操作页面元素,切换到iframe,处理alter.confirm和prompt对话框这些在网上随处可见的信息:本博客此分类 ...
- Selenium操作页面元素
转自:http://blog.sina.com.cn/s/blog_6966650401012a7q.html 一.输入框(text field or textarea) //找到输入框元素: Web ...
随机推荐
- Python中字典dict
dict字典 字典是一种组合数据,没有顺序的组合数据,数据以键值对形式出现 # 字典的创建 # 创建空字典1 d = {} print(d) # 创建空字典2 d = dict() print(d) ...
- 2018-05-09 5分钟入门CTS-尝鲜中文版TypeScript
知乎原链 本文为中文代码示例之5分钟入门TypeScript的CTS版本. CTS作者是@htwx(github). 它实现了关键词和标准库的所有命名汉化. 本文并未使用附带的vscode相关插件(包 ...
- 在Win32程序中嵌入Edge浏览器组件
代码未经测试,只做个记录 据说只是改了UA. 在注册表修改这个路径,并且把自己程序添加进去,写一个浏览器控件的版本号,只要高于12000就自动改为Edge. For 64bit application ...
- 根据class判断
一.生命不息,代码不止
- python----csv的使用
详细的内容参考:https://docs.python.org/2/library/csv.html#module-csv 打开csv # -*- coding: utf8 -*- import cs ...
- SQL的日期转换
日期转会计期 SUBSTRING(CONVERT(VARCHAR,getdate(), 20), 1, 7) 2015-06 SUBSTRING(CONVERT(VARCHAR,DATEADD(m ...
- 如何阅读luajit的代码——用vs调试篇
为什么要看luajit的源码 作为目前最快的脚本语言之一,luajit确实是一个杰作,但相比原生lua仅仅几万行的代码而言,luajit却可以说是巨无霸.更要命的是,luajit之所以快,是因为大量使 ...
- JAVA的下载与安装和环境变量配置等详细教程
初学JAVA时,新手常常不知如何下载JAVA,也不知如何安装JAVA以及对JAVA配置环境变量.近期学弟学妹常请教我如何下载安装和配置JAVA,于是写下此博文以便更多新手快速入门,由于我本人是玩智能车 ...
- C# -- 文件的压缩与解压(GZipStream)
文件的压缩与解压 需引入 System.IO.Compression; 1.C#代码(入门案例) Console.WriteLine("压缩文件..............."); ...
- LeetCode算法题-Word Pattern(Java实现)
这是悦乐书的第202次更新,第212篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第68题(顺位题号是290).给定一个模式和一个字符串str,找到str是否完全匹配该模 ...