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

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

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

is not clickable at point (115,358) because another element
obscures 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();

转载地址:https://www.cnblogs.com/shengs/p/11203221.html

posted @   贺满  阅读(2376)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2010-07-08 Oracle多表连接查询
点击右上角即可分享
微信分享提示