Selenium定位不到元素常见原因及解决办法

2023-11-19

Python3 Selenium定位不到元素常见原因及解决办法

一、问题描述

**  在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况:**

**  报错信息: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“xpath”}**

二、分析以及解决方案

1,原因一以及解决方案

(1)原因:

**  ******Frame/Iframe原因定位不到元素:****这个是最常见的原因,首先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位。

(2)解决方案:

如果iframe有name或id的话,直接使用switch_to_frame(“name值”)或switch_to_frame(“id值”)。如下:

driver=webdriver.Firefox()
driver.get(r'http://www.126.com/')
driver.switch_to_frame('x-URS-iframe')  #需先跳转到iframe框架
username=driver.find_element_by_name('email')
username.clear()

如果iframe没有name或id的话,则可以通过下面的方式定位:

#先定位到iframe
elementi= driver.find_element_by_class_name('APP-editor-iframe')
#再将定位对象传给switch_to_frame()方法
driver.switch_to_frame(elementi) 

如果完成操作后,可以通过switch_to.parent_content()方法跳出当前iframe,或者还可以通过switch_to.default_content()方法跳回最外层的页面。

2,原因二以及解决方案

(1)原因:

**  ******Xpath描述错误原因:****由于Xpath层级太复杂,容易犯错。但是该定位方式能够有效定位绝大部分的元素,建议掌握。

(2)解决方案:

**  <1>.可以使用Firefox的firePath,复制xpath路径。该方式容易因为层级改变而需要重新编写过xpath路径,不建议使用,初学者可以先复制路径,然后尝试去修改它。**

**  <2>.提高下写xpath的水平.**

**  **如何检验编写的Xpath是否正确?

**  编写好Xpath路径,可以直接复制到搜狐浏览器的firebug查看html源码,通过Xpath搜索:如下红色框,若无报错,则说明编写的Xpath路径没错。**

**  例如:find_element_by_xpath("//input[@id=‘kw’]")**

img


3,原因三以及解决方案

(1)原因

**  ******页面还没有加载出来,就对页面上的元素进行的操作:****这种情况一般说来,可以设置等待,等待页面显示之后再操作,这与人手工操作的原理一样:

(2)解决方案

**  <1>.设置等待时间;缺点是需要设置较长的等待时间,案例多了测试就很慢;**

**  <2>.设置等待页面的某个元素出现,比如一个文本、一个输入框都可以,一旦指定的元素出现,就可以做操作。**

**  <3>.在调试的过程中可以把页面的html代码打印出来,以便分析。**

**  导入时间模块。**

**  import time**

**  time.sleep(3)**

4,原因四以及解决方案

(1)原因

**  ******动态id定位不到元素:****每次调用页面出现的元素的ID会动态随机分配。

(2)解决方案

**  如果发现是动态id,推荐使用xpath的相对路径方法查找到该元素。**

**  **img

5,原因五以及解决方案

(1)原因

**  ******二次定位,如弹出框登录:****如百度登录弹出框登录百度账号,需先定位到百度弹出框,然后再定位到用户名密码登录。

(2)解决方案

[复制代码](javascript:void(0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium定位不到元素常见原因及解决办法 的相关文章

  • Python 3 中是否有像 C++ 中的 getchar() 这样的内置函数?

    我想在 python 中进行用户输入 类似于获取字符 c 中使用的函数 C 代码 include
  • 当存在多个条件时替换 numpy 数组中的元素

    这个问题与以下帖子相关 如果满足条件则替换 Numpy 元素 https stackoverflow com questions 19766757 replacing numpy elements if condition is met 假
  • Python启动脚本[重复]

    这个问题在这里已经有答案了 我想执行一个脚本work py在Python中 执行一些初始化脚本后init py 如果我正在寻找交互式会话 请执行python i init py或设置PYTHONSTARTUP path to init py
  • 安装 python-dev 和链接库后,Cython 中的 Hello World 程序因 gcc 失败

    我创建了一个简单的 hello world 程序 并尝试使用 gcc 执行生成的 C 程序 但无论我做什么 我都会得到大量未定义的引用 SO 有很多类似的问题 但他们都说安装 python dev 或其某些变体 或添加用于链接和加载库的标志
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 不区分大小写的用户输入字符串

    使用哪个函数使用户输入字符串不区分大小写 correctAnswer London userGuess input What is the capital of Great Britain if userGuess London print
  • Python - 如何在 Python 中剪切字符串?

    假设我有以下字符串 http www domain com s some two 20 怎样才能脱掉之后的东西 包括 并有这个字符串 http www domain com s some 好吧 回答眼前的问题 gt gt gt s http
  • 是否可以在数据类中使用 *args?

    我最近开始使用数据类 https www python org dev peps pep 0557 它们将成为 3 7 的一个很好的补充 我很好奇是否或如何可以使用数据类重新创建此类的相同功能 class Nav object def in
  • 使用 Python 从基于 AJAX 的网站提取信息

    我正在尝试使用 Python 检索基于 ajax 的网站 例如 www snapbird org 上的查询结果 由于它没有显示在页面源中 我不确定如何继续 我是一个Python新手 因此如果我能得到一个指向正确方向的指针那就太好了 如果更容
  • 修改Keras中的层权重

    我正在尝试修改 Keras 中某个层的输出 我有一个编码器 它将时间序列转换为潜在空间 之后 对于每个压缩的时间序列 我想向时间序列添加一些数字 例如我有 input d Input 100 h1 d Reshape 100 1 input
  • ValueError:当数组不是序列时设置带有序列的数组元素

    您好 此代码旨在存储使用 open cv 绘制的矩形的坐标 并将结果编译为单个图像 import numpy as np import cv2 im cv2 imread 1 jpg im3 im copy gray cv2 cvtColo
  • 如何使用ssl启动flask_socketio应用程序?

    我应该如何使用 SSL 将 app run 转换为 sockio run 我有下面的应用程序启动代码与 Flask 开发服务器一起运行 if name main app run ssl context ssl cert ssl key 我现
  • 如何对 glob.glob 进行数字排序?

    我在一个文件夹中有一堆按数字排序的文件 当我尝试对 glob glob 进行排序时 我从来没有以正确的顺序获得文件 文件示例和预期输出排序 folder C Users user Desktop folder 1 sample mp3 C
  • Python并发.futures.ThreadPoolExecutor max_workers

    我在网上找了好久 但没有用 请帮助或尝试给我一些如何实现这一目标的想法 当我使用 python 模块时concurrent futures ThreadPoolExecutor max workers None 我想知道max worker
  • 如何使用 python 子进程杀死性能记录?

    我正在尝试使用性能实用程序 https www brendangregg com perf html监视我的系统 它将在 python 脚本中启动和终止 我创建了一个沙箱 如下所示 extra params F 99 g a record
  • 在查找表中查找字符串值以填充第二个数据帧

    我有两个数据框 main df header 1 0 value 1 1 value 2 2 value 3 3 value 1 和一个查找数据框lookup df header 1 header 2 0 value 1 lookup va
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • 使用 str 方法替换 string 中的多个元素

    我正在尝试编写一个函数 它接受一串 DNA 并返回赞美 我已经尝试解决这个问题有一段时间了 并浏览了 Python 文档 但无法解决 我已经为该函数编写了文档字符串 以便您可以看到答案应该是什么样子 我在这个论坛上看到过类似的问题 但我无法
  • Python libusb pyusb“mach-o,但架构错误”

    我在使用 pyusb 模块时遇到一些问题 我已将问题范围缩小到一行 并创建了一个小示例脚本来复制错误 usr bin env python This module was created to isolate the problem in
  • 在 Python 中窗口“失焦”时读取 HID 输入

    我在一个问题上苦苦挣扎了好几天 但无法让它发挥作用 我刚刚开始使用 python 现在已经面临着我在这个项目中将面临的最大问题 情况是这样的 我必须编写一个扫描条形码的程序 将其传达给在线服务并打印 PDF 这一切都很好 但我也想在窗口 失

随机推荐