最近正在学习写自动化测试脚本,遇到一个错误迟迟未解决,导致自信心大受挫败,甚至想放弃。

思考许久突然想到,我遇到的问题是否也有人会遇到,如果有的话问题就应该有解决办法了。没什么问题是百度解决不了的,如果不行那就谷歌。

终于有了前辈们的指引,问题解决了,瞬间信心十足,又有了学习的动力。

下面是遇到的错误提示:定位不到元素

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元素定位不到问题分析及解决办法的更多相关文章

  1. selenium元素定位不到之iframe

    我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...

  2. selenium元素定位不到之iframe---基于python

    我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...

  3. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  4. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  5. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  6. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  7. JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法

    今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...

  8. php中session_start()相关问题分析与解决办法

    介绍下,在php中使用session时遇到的一些问题,与相关解决方法.1.错误提示Warning: Cannot send session cookie - headers already sentW ...

  9. oracle执行update语句时卡住问题分析及解决办法

    转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...

随机推荐

  1. 如何安装一个高可用K3s集群?

    作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...

  2. java查询elasticsearch聚合

    java查es多分组聚合: SearchRequestBuilder requestBuilderOfLastMonth = transportClient.prepareSearch(TYPE_NA ...

  3. 蒲公英 · JELLY技术周刊 Vol.28: Next.js 10 发布

    蒲公英 · JELLY技术周刊 Vol.28 前端应用到底该选 SSR 还是 CSR?每个项目技术栈决策的时候都会根据实际需求有自己的看法,而在不久前 React 17 发布之后,自然而然也会有同学好 ...

  4. C++在C的基础上改进了哪些细节

    C++ 是在C语言的基础上改进的,C语言的很多语法在 C++ 中依然广泛使用,例如:  C++ 仍然使用 char.short.int.long.float.double 等基本数据类型:   ...

  5. php ci下添加一个创建常用的模块和控制器方法

    我这么写是非常不好的 ,这些都可以写在lirbraries里面 (ci就是这么干的) 我这里是自己用 大概一个模型 没那么多讲究 现在core/CodeIgniter.php 文件 if($modle ...

  6. 力扣 122 买卖股票的最佳时机II

    力扣 122 买卖股票的最佳时机II 思路: 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关.从收益的角度来看,确实每一天的不同选择都会产生不同 ...

  7. 利用 Docker 构建一个简单的 java 开发编译环境

    目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...

  8. 各大数据库Java数据源参数

    Sybase: driver=com.sybase.jdbc3.jdbc.SybDriver url=jdbc:sybase:Tds:172.22.12.212:5000/ctninfo user=s ...

  9. Js中函数声明和函数表达式的区别

    先看以下几段烧脑的代码: f();//=>? var f = function () { console.log("var"); } function f() { conso ...

  10. tcpack---1简述

    TCP重传机制 TCP要保证所有的数据包都可以到达,所以,必需要有重传机制. 超时重传机制 一种是不回ack,死等3,当发送方发现收不到3的ack超时后,会重传3.一旦接收方收到3后,会ack 回 4 ...