Selenium报错:Element is not clickable at point的解决办法

文章介绍了在使用Selenium进行自动化测试时遇到的元素不可点击的问题,由于其他元素遮挡导致。提供了两种解决方案:一是通过等待遮挡元素消失再点击目标元素;二是登录后刷新页面,使遮挡元素消失,然后等待目标元素可点击。

最近在写Selenium Java脚本时遇到一个问题,登录进入系统之后,要点击左侧的一个菜单,但是执行到该语句时报下面的错误:

Firefox中报错如下:
org.openqa.selenium.ElementClickInterceptedException: Element

is not clickable at point (115,358) because another elementobscures it

错误的意思是:无法点击这个元素,因为被另一个div掩盖(obscure)住了。

Chrome 中报错如下:
org.openqa.selenium.WebDriverException: unknown error: Element

...

is not clickable at point (115, 358). Other element would receive the click:

...


(Session info: chrome=67.0.3396.99)

错误的意思是:无法点击这个元素,另外一个div元素接收了这个点击。

经分析调试,以下方法可以解决此类问题。
解决方法一:
思路:先使用invisibilityOf等待掩盖的div消失不见,再使用elementToBeClickable等待要点击的元素达到可点击的状态。

示例:

//要点击的左侧菜单元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));

//掩盖的div元素
WebElement ObscureDiv = driver.findElement(By.xpath("//div[@class='el-loading-mask is-fullscreen el-loading-fade-leave-active el-loading-fade-leave-to']"));

//使用显示等待,等待掩盖的div消失
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.invisibilityOf(ObscureDiv));

//等待左侧菜单到可点击状态
wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));

//之后再执行点击
LeftMenu .click();
解决方法二:
思路:因为掩盖的div可能会在进行一些操作后,会消失,所以登录后执行一个页面刷新的操作,此div即可消失。

      再等待左侧菜单到可点击状态即可。

示例:

//登录之前的代码

//登录后加时间等待,并且进行一次页面刷新
Thread.sleep(3000);
driver.navigate().refresh();

//要点击的左侧菜单元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));

//等待左侧菜单到可点击状态
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));

//之后再执行点击
LeftMenu .click();

最后,绵薄之力 感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 资料获取方式:

 

在使用 Selenium 进行自动化测试时,如果遇到 `element click intercepted: Element <span> is not clickable at point` 错误,这通常意味着目标元素被其他元素遮挡,导致无法直接点击。以下是几种常见的解决方案: ### 使用显式等待确保遮挡元素消失 一种有效的方法是等待遮挡元素不可见后再进行点击操作。可以使用 `WebDriverWait` 结合 `ExpectedConditions` 来实现这一点[^5]。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://example.com") # 等待遮挡元素消失 wait = WebDriverWait(driver, 10) wait.until(EC.invisibility_of_element_located((By.XPATH, "//div[@class='遮挡元素的类名']"))) # 然后等待目标元素可点击 element = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[@role='img']"))) element.click() ``` ### 滚动到元素可见位置 有时页面滚动不足也会导致元素被遮挡。可以通过执行 JavaScript 脚本来滚动到目标元素的位置[^3]。 ```python target_element = driver.find_element(By.XPATH, "//span[@role='img']") driver.execute_script("arguments[0].scrollIntoView();", target_element) target_element.click() ``` ### 使用 ActionChains 执行点击 如果上述方法都不奏效,可以尝试使用 `ActionChains` 来模拟用户的实际点击行为[^2]。 ```python from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(target_element).click().perform() ``` ### 检查并处理动态加载的内容 对于动态加载的内容,可能需要增加额外的等待时间或者监听某些事件来确保内容完全加载完毕后再进行点击操作。 ### 相关问题 1. 如何在Selenium中处理由于元素被遮挡而无法点击的问题? 2. 在自动化测试中如何确保元素在点击之前已经完全加载? 3. 使用JavaScript与Selenium结合时有哪些技巧可以帮助解决元素不可点击的问题? 4. 如何利用Selenium的ActionChains类来模拟更复杂的用户交互?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值