Python+selenium自动化元素定位防踩坑

在自动化UI测试过程中常常会在元素定位阶段就踩坑,碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。

踩坑一:StaleElementReferenceException

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

异常原因: 意思是,引用的元素已过期。原因是页面刷新了,此时当然找不到之前页面的元素,就算是后退回来的页面也是不一样的。

在编写脚本时一直报这个错,使用显示等待都不行,在一顿百度操作后才知道是元素被刷新了

我们发现,仅仅是刷新了一下页面,两次的element id是不同的,这就说明这是两个不同的元素,如果用之前的element,自然会报错

原因很明显,你用别人的身份证id去找现在的人,哪怕这两个人长的很像,他也会告诉你,对不起,你找错人啦。

解决方法:

有时我们无法避免,不确定什么时候元素就会被刷新。页面刷新后重新获取元素的思路不变,这时可以使用python的异常处理语句:try…except…,异常出现时重新执行,关键代码如下

如下图:我在实际工作当中编写脚本时使用异常try捕获异常后,页面刷新后重新获取元素,可以成功找到元素了

踩坑二:ElementClickInterceptedException(元素点击交互异常)

具体报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted is not clickable at point (1421, 283). Other element would receive the click:

E (Session info: chrome=104.0.5112.102)

意思是,元素定位相互覆盖,元素已经找到,但是无法点击

解决方法:

方法一:使用强制等待,但是每次都有类似的元素无法点击使用强制等待的话会延长脚本执行时间

time.sleep()    

前言:之前便遇到过很多次该问题的报错,就没有管它,但是随着越来越多的元素报该错,每次使用强制等待会大大延长脚本的执行时间,于是便网上找各种方法解决该问题,最终发现是自己使用显示等待的方法错了

如下是显示等待的用法和区别

方法二:显性等待

element_to_be_clickable--元素是否可点击

vibility of element_ located--元素是否可见

presence_of_element_located--元素是否存在

如上:三种等待方法,最开始我一直使用的是presence_of_element_located,判断元素是否存在,最终还是报错,提示元素元素点击拦截异常

element_to_be_clickable--等待元素出现可以点击,便可以元素定位成功

需要先导包:from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
复制代码

element = WebDriverWait(self.browser, 5).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='请输入会员手机号']")))
element.clcik()
复制代码

方法三:使用JS点击

然而有时即使已经显式等待了,却仍然会报错: ElementClickInterceptedException,这多少有点奇怪,为什么 webdriver 有时就是无法点击,我不知道,也许这和他首先执行的一些验证检查有关,反正就在这一刻,它不给你点

 代码如下:element = self.browser.find_element(By.XPATH, "(//span[@class='el-checkbox__inner'])[4]")
self.browser.execute_script("arguments[0].click();", element)
复制代码

这是通过 JavaScript 完成的点击,js可以避开一些校验

👆以上便是在编写selenium自动化时元素定位时踩的坑,以此分享防止踩坑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python+Selenium自动化测试是一种基于Python编程语言和Selenium自动化测试框架的测试方法。它可以模拟用户在浏览器中的操作,自动化执行测试用例,提高测试效率和准确性。Python+Selenium自动化测试广泛应用于Web应用程序的测试,包括功能测试、性能测试、安全测试等。 ### 回答2: Python Selenium自动化测试是指使用Python作为编程语言,使用Selenium作为自动化测试工具,对网站进行自动化测试的过程。这种测试方法可以自动化测试需要大量重复操作的网站功能,如注册、登录、搜索等。 Python Selenium自动化测试的主要优点是: 1. 高效性:Python编程语言具有丰富的网络库,可以轻松地访问和操作互联网上的信息,同时Selenium可以模拟用户对网站的真实操作,这使得Python Selenium自动化测试可以自动化执行大量复杂的测试任务,从而提高测试效率。 2. 精度高:Python Selenium自动化测试可以准确地模拟用户对网站的操作,从而可以检查网站功能的正确性和可靠性。 3. 易于使用:使用Python编程语言进行Selenium自动化测试非常容易上手,仅需了解基本的Python语法和Selenium的API即可。 4. 高度可定制性:Python Selenium自动化测试可以完全自定义测试案例,开发者可以根据自己的需要,随时调整测试案例,从而提高测试的灵活性和效率。 在Python Selenium自动化测试中,最常用的测试工具Selenium WebDriver,它可以模拟用户对网站进行的所有操作,并能够获取和操作网页中的数据和元素,从而实现自动化测试。同时可以使用不同的浏览器驱动程序(如Chrome、Firefox、IE等)来执行测试,从而实现跨浏览器测试。 总之,Python Selenium自动化测试可以帮助开发人员和测试人员快速地高效测试网站的各种功能,提高测试效率和准确性, 并且可以针对复杂的测试场景进行定制化的处理,让测试人员只需关注测试结果,从而减少测试人员的负担。 ### 回答3: Python Selenium自动化测试是一种自动化测试工具和框架,利用Python语言和Selenium库来实现自动化测试过程。它是基于Web应用程序的UI测试,可以模拟用户行为,比如单击按钮、输入文本、检查页面元素等操作来检查应用程序的功能、性能、兼容性等. Python Selenium自动化测试具有以下特点: 1.跨平台兼容性:基于PythonSelenium自动化测试对多种操作系统兼容,如Windows、Linux和Mac OS。 2.多浏览器支持:Python Selenium自动化测试支持Chrome、Firefox、IE、Safari等多种浏览器的自动化测试,可选择不同浏览器运行测试用例。 3.易于使用:Python语言是易于学习的编程语言,使用Selenium的API可以简化测试用例的编写。 4.运行速度快:Python Selenium自动化测试使用操作系统本身的底层机制进行操作,比起手动测试来说用例实现自动化之后运行速度更快。 总之,Python Selenium自动化测试是一种高效、简单、跨平台的自动化测试工具。在现代软件开发中,自动化测试已经成为必不可少的一部分,Python Selenium自动化测试对于Web应用程序的自动化测试是必备的技术决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值