selenium元素定位不到问题分析及解决办法
最近正在学习写自动化测试脚本,遇到一个错误迟迟未解决,导致自信心大受挫败,甚至想放弃。
思考许久突然想到,我遇到的问题是否也有人会遇到,如果有的话问题就应该有解决办法了。没什么问题是百度解决不了的,如果不行那就谷歌。
终于有了前辈们的指引,问题解决了,瞬间信心十足,又有了学习的动力。
下面是遇到的错误提示:定位不到元素
Traceback (most recent call last):
File "cs.py", line 26, in test_GIS
self.driver.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[1]/div/ul/li[2]').click()#点击GIS地图
File "F:\python3.7\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "F:\python3.7\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "F:\python3.7\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "F:\python3.7\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <li class="ivu-menu-item">...</li> is not clickable at point (33, 209). Other element would receive the click: <i class="ivu-icon ivu-icon-ios-warning"></i>
(Session info: chrome=78.0.3904.97)
1)原因分析和解决办法: 在定位元素时,页面元素未加载完成
在定位元素前面添加休眠时间,原因是页面未加载完全,无法识别操作后的元素。刚开始一直以为是元素定位的不对,但我通过CMD命令窗口一行一行的运行检查发现并没有出现报错。
直接在元素定位前面添加休眠时间,结果成功运行。
2)原因分析和解决办法: 表单嵌套原因
顺着定位元素往上找,查看是否有<iframe>标签,找到说明要定位此元素,需先切换到此表单,在定位元素。
需使用switch_to_frame("name值")switch_to_frame("id值") ,若该iframe没有id或name值,先定位到iframe,再将定位对象传到
switch_to_frame
1 driver = webdriver.Chrome()
2 driver.switch_to_frame("name值")
3)原因分析和解决办法: 元素未达到可见条件
如下,需要鼠标悬停才能定位的,否则不可见无法定位。
需达到前置条件后才可定位。
4)原因分析和解决办法: 打开了新的窗口
需要查找的元素在打开的新的窗口 (注意有时候打开新的窗口后,原窗口会关闭)需切换到新窗口才能定位。
切换到新窗口方法:
1 #获得新打开窗口的句柄
2 handle = self.driver.current_window_handle
3 #获得全部窗口句柄
4 handles = self.driver.window_handles
5 #切换到新窗口
6 for newhandles in handles:
7 if newhandles != handle:
8 self.driver.switch_to_window(newhandles)
5)原因分析和解决办法:定位方式不唯一,或者没有该元素
检查该元素是否可定位,可通过F12的console标签通过document.querySelector() 的方法定位,可验证是否能找到元素
如果通过以上检查验证没有问题但是运行时依然定位不到,可以考虑其他语法或者加多层逻辑关系,如下检查没有问题,但是运行一直报错定位不到元素
报错代码:
self.driver.find_element_by_css_selector("body > div:nth-child(22) > div.ivu-modal-wrap.modal-vertical-center > div > div > div.ivu-modal-body > div:nth-child(2) > button > span").click()
改成以下的定位方式就成功运行了,楼主百思不得其解。。
self.driver.find_element_by_xpath("//div[@style='width: 650px;']/div/div[2]/div[2]/button/span").click()
selenium元素定位不到问题分析及解决办法的更多相关文章
- selenium元素定位不到之iframe
我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...
- selenium元素定位不到之iframe---基于python
我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- Selenium3 + Python3自动化测试系列二——selenium元素定位
一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- selenium元素定位陷阱规避
为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...
- JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...
- php中session_start()相关问题分析与解决办法
介绍下,在php中使用session时遇到的一些问题,与相关解决方法.1.错误提示Warning: Cannot send session cookie - headers already sentW ...
- oracle执行update语句时卡住问题分析及解决办法
转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...
随机推荐
- 深度对比Apache CarbonData、Hudi和Open Delta三大开源数据湖方案
摘要:今天我们就来解构数据湖的核心需求,同时深度对比Apache CarbonData.Hudi和Open Delta三大解决方案,帮助用户更好地针对自身场景来做数据湖方案选型. 背景 我们已经看到, ...
- SQL Server 列存储索引概述
第一次接触ColumnStore是在2017年,数据库环境是SQL Server 2012,Microsoft开始在SQL Server 2012中推广列存储索引,到现在的SQL Server 201 ...
- LTE DTU和4G DTU有什么不同
其实4G DTU和LTE DTU从本质上来说是没有什么区别的,只是使用的运营商不同,设备的编号会有不同,都是属于DTU设备. LTE是baiLong Term Evolution(长期演进)的缩写.3 ...
- 水题挑战1:NOIP 2013 选择客栈
丽江河边有\(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 \sim k-1\) 表示),且 ...
- 解决 ‘Could not fetch URL https://pypi.python.org’的问题
[前提]: win10下python3和python2共存环境,但是环境变量只配置了python3 [问题]: 用pip安装一个包执行pip2 install xxx的时候报错Fatal error ...
- 想springboot启动完成后执行某个方法
如题,很多时候,我们都需要在springboot项目启动后初始化化一些自己的数据 原文地址:https://www.jianshu.com/p/f80f833ab8f6 实现方法有2个. 一.Appl ...
- canvas基础[一]探究出初中数学知识
何时用SVG何时用canvas SVG 矢量图,视觉清晰,文件小 <svg viewBox="0 0 100 100"> <circle cx="50& ...
- 解决IE9弹出json下载提示框
<!-- 开启注解 --> <mvc:annotation-driven> <mvc:message-converters> <bean class=&quo ...
- 经典c程序100例==21--30
[程序21] 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下 的一半零一个.到第10天早 ...
- CSS之background——背景与渐变练习题
1.单选题 将背景的绘制区域规定到内容框,应使用background-clip属性中的哪个属性值? A content-box B border-box C padding-box D none-bo ...