关于建设网站的图片素材,太原seo软件,wordpress模板无法自定义导航,做外链网站在自动化UI测试过程中常常会在元素定位阶段就踩坑#xff0c;碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。 踩坑一#xff1a;StaleElementReferenceException
selenium.common.exceptions.StaleElementReferenceException: Message: stale element re… 在自动化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: chrome104.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[classel-checkbox__inner])[4])
self.browser.execute_script(arguments[0].click();, element)
复制代码 这是通过 JavaScript 完成的点击js可以避开一些校验
以上便是在编写selenium自动化时元素定位时踩的坑以此分享防止踩坑