当前位置: 首页 > news >正文

Selenium 元素不能定位总结

目录

元素不能定位总结:

1、定位语法错误:

定位语法错误,如无效的xpath,css selector,dom路径错误,动态dom

定位语法错误,动态路径(动态变化)

定位策略错误,如dom没有id用id定位当然定位,使用dom中不存在的属性定位

解决办法:

2、元素未显示

等待时间不够

解决办法:

元素隐藏在其他元素下(如列表选项,二级窗口),需要交互才展示

解决办法:

3、元素在dom中存在多个,未使用正确的查找方法

解决办法:

解决办法:

4、selenium自身问题:

解决办法:

5、元素不在当前视觉范围

解决办法:

6、其他原因

网络异常

浏览器窗口异常关闭

网站后台异常页面无法加载


元素不能定位总结:


1、定位语法错误:

  • 定位语法错误,如无效的xpath,css selector,dom路径错误,动态dom

  • 定位语法错误,动态路径(动态变化)

  • 定位策略错误,如dom没有id用id定位当然定位,使用dom中不存在的属性定位

解决办法:

建议编码时现在浏览器调试模式下使用编写的xpath、css selector 在待测页面定位一下,看能不能识别到元素

2、元素未显示

  • 等待时间不够

一些页面需要加载的资源比较多:如图片、样式、js动态文件等,因此如果页面没有加载完的话,有些元素是不会显示的,也定位不到

解决办法:

使用webdriverwait +显性条件来增加等待时间

WebDriverWait(self.driver, 15).until(EC.visibility_of_all_elements_located(loc))

常见的显性条件如下:

visibility_of_all_elements_located

用于检查的DOM上是否存在所有元素的期望页面并可见。可见性意味着元素不仅
显示,但也具有大于0的高度和宽度。定位器-用于查找元素一旦找到并可见WebElement,就返回其列表


text_to_be_present_in_element

检查给定文本是否存在于指定的元素。定位器,文本

invisibility_of_element_located

检查元素是否不可见的期望出现在DOM上。用于查找元素的定位器

number_of_windows_to_be

期望窗口数为某个值

  • 元素隐藏在其他元素下(如列表选项,二级窗口),需要交互才展示

一些元素隐藏在另外一些组件下面,如列表组件中的选项,窗口组件中的文字、按钮等

解决办法:

等其他条件满足再操作

3、元素在dom中存在多个,未使用正确的查找方法

例如定位语法在页面定位到多个元素未使用find_elements而是用find_element,find_element默认查找第一个就返回因此可能查不到想要查找的元素。这种情况如果要交互的元素不是第一个就会报异常了。

解决办法:

使用find_elements定位多个元素

另外还有可能查找第一个dom在页面没有显示,这种情况是dom能找到,但是这个元素没有在页面展示。什么意思呢?就是说是个伪元素,这个元素在页面是没有宽度和高度的因此也会报错。这种情况可以使用显性条件(excepted condition)“visibility_of_element_located”来查找,它表示元素的长宽不为0,保证元素在页面是存在的。

解决办法:

使用显性条件避免定位到伪元素


4、selenium自身问题:

如图表元素(canvas,svg),由于图表元素是使用js绘制的,对selenium来说相当于一张图片,所以使用dom定位不到

解决办法:

借助第三方库或者图形识别来处理


5、元素不在当前视觉范围

待操作元素在其他windows、frame、iframe、alert等

解决办法:

这个时候需要需要切换到新窗口、frame、iframe、alert才能定位到。

6、其他原因

网络异常

有些时候网络连接异常会导致页面未加载成功,故而无法操作页面

浏览器窗口异常关闭

测试清理使用了driver.close()关闭了窗口,导致后面的会话异常无法执行后续测试

网站后台异常页面无法加载

例如应用发版部署中,应用未完全启动,故而无法查找页面元素

http://www.lryc.cn/news/248789.html

相关文章:

  • 1-2 非阻塞延时实现LED闪烁功能(累计定时中断次数)--多路软件定时器的功能实现
  • 数据类型及强制转换
  • Python----高阶函数
  • Unity地面交互效果——6、地形动态顶点置换和曲面细分
  • Linux系统服务之一次性服务(2)
  • Vue项目解决van-calendar 显示白色空白,需滑动一下屏幕,才可正常显示
  • Linux:可视化管理工具Webmin的安装
  • WARNING: Access control is not enabled for the database.
  • JavaScript编程进阶 – Return语句
  • Python与设计模式--备忘录模式
  • 04_Flutter自定义Slider滑块
  • 服务器数据恢复—EMC存储raid5故障导致上层应用崩溃的数据恢复案例
  • 7.1 Windows驱动开发:内核监控进程与线程回调
  • 基于ssm的汽车论坛管理系统设计与实现
  • 实习开发日志经验总结(一)
  • 【Unity基础】8.简单场景的搭建
  • 傅里叶变换及其在机器学习中的应用
  • xorm源码学习
  • Vue3中的<script setup>和<script>的区别
  • Docker笔记-Docker搭建最新版zabbix服务端(2023-07-31)
  • QT配合CSS隐藏按钮
  • 2023亚太地区数学建模C题思路分析+模型+代码+论文
  • Linguistic Steganalysis in Few-Shot Scenario论文阅读笔记
  • 详细学习Pyqt5的4种项目部件(Item Widget)
  • notepad++ 插件JSONView安装
  • AKConv:具有任意采样形状和任意数目参数的卷积核
  • 如何使用C++开发集群服务
  • docker安装以及idea访问docker
  • 激光切割头组件中喷嘴的作用是什么
  • 腾讯云双11活动最后一天,错过再等一年!