You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG+Selenium运行时报element is not clickable at point错误如何解决

报错原因
  • elementToBeClickable判断逻辑只校验目标元素是否可见、是否处于可交互的enabled状态,不会校验是否有其他元素堆叠在目标元素上方。即使你肉眼看不到modal-body元素,也有可能是Angular框架的DOM变更过程中,该遮罩层处于消失的过渡动画阶段,代码执行点击的瞬间该元素还未完全从DOM中移除/透明化,触发了点击拦截。
  • 目标元素不在当前浏览器视口范围内,Selenium自动滚动的位置存在偏差,导致固定定位的头部、侧边栏或者滚动容器(报错里的modal-body本身是带滚动的容器)边缘遮挡了目标元素的点击坐标。
  • 页面存在未被你注意到的动态加载遮罩(比如接口请求触发的全局loading层),在点击执行的短暂瞬间处于可见状态。
解决方案

按优先级从高到低尝试:

  1. 新增遮挡元素消失的前置等待,在等待目标元素可点击前,先确保报错中提到的遮挡元素完全不可见:
// 先等待modal-body消失
clickableWait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("modal-body")));
// 再等待目标元素可点击
clickableWait.until(ExpectedConditions.elementToBeClickable(middlename));
  1. 主动将目标元素滚动到视口中央,避免滚动偏差导致的遮挡:
JavascriptExecutor js = (JavascriptExecutor) getWebDriver();
// 将元素滚动到视口正中央
js.executeScript("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", middlename);

middlename.click();
middlename.clear();
middlename.sendKeys("Jhon");
  1. 若以上方案均无效,直接使用JavaScript执行点击操作,绕过前端的点击坐标校验:
JavascriptExecutor js = (JavascriptExecutor) getWebDriver();
js.executeScript("arguments[0].click();", middlename);
middlename.clear();
middlename.sendKeys("Jhon");
  1. 替换代码中的硬等待waitPlease(2)为显式等待逻辑,避免不同环境下页面渲染速度不一致导致的偶现问题。

内容的提问来源于stack exchange,提问作者ankush singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:06:03