org.openqa.selenium.ElementClickInterceptedException:在无头模式下使用 Selenium 和 Java 发生元素单击拦截错误

2024-01-02

我有一个正在使用 java 和 selenium 的项目。 在UI模式下测试工作正常。 但是在无头模式下我收到此错误

org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>

我该如何解决这个问题(在 UI 模式下工作)。这是我的代码

WebDriver driver = getWebDriver();
        WebElement element;
        Thread.sleep(60000);
        element = driver.findElement(By.xpath("//label[@formcontrolname='reportingDealPermission']"));
        element.click();

为什么在硒中没有移动到元素并打破所有层的操作。 这是用户界面。 这在 UI 模式下工作,在无头模式下工作,睡眠了 6 分钟但没有解决,所以这不是时间问题


这个错误信息...

org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>

...意味着click所需元素上的内容被其他一些元素拦截。


单击一个元素

理想情况下,在调用时click()在您需要诱导的任何元素上WebDriver等待 https://stackoverflow.com/questions/48989049/selenium-how-selenium-identifies-elements-visible-or-not-is-is-possible-that-i/48990165#48990165为了elementToBeClickable()您可以使用以下任一方法定位策略 https://stackoverflow.com/questions/48369043/official-locator-strategies-for-the-webdriver/48376890#48376890:

  • cssSelector:

    new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
    
  • xpath:

    new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
    

Update

更改为后headless如果它仍然不起作用并且仍然出现异常,那么仍然需要考虑以下其他一些措施:

  • 无头模式下的 Chrome 浏览器 https://stackoverflow.com/questions/46920243/how-to-configure-chromedriver-to-initiate-chrome-browser-in-headless-mode-throug/49582462#49582462不以最大化模式打开。因此,您必须使用以下命令/参数之一来最大化无头浏览器Viewport https://www.w3schools.com/css/css_rwd_viewport.asp:

    • 添加参数start-maximized

      ChromeOptions options = new ChromeOptions();
      options.addArguments("--headless");
      options.addArguments("start-maximized");
      WebDriver driver = new ChromeDriver(options);
      
    • 添加参数--window-size

      ChromeOptions options = new ChromeOptions();
      options.addArguments("--headless");
      options.addArguments("--window-size=1400,600");
      WebDriver driver = new ChromeDriver(options);
      
    • Using setSize()

      ChromeOptions options = new ChromeOptions();
      options.addArguments("--headless");
      WebDriver driver = new ChromeDriver(options);
      driver.manage().window().setSize(new Dimension(1440, 900));
      

您可以在中找到详细的讨论无法在无头模式下最大化 Chrome 窗口 https://stackoverflow.com/questions/45374377/not-able-to-maximize-chrome-window-in-headless-mode/45374670#45374670

  • 另外,您还可以等待拦截元素不可见使用预期条件 https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html invisibilityOfElementLocated在尝试之前click()如下:

    • cssSelector:

      new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.footer")));
      new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
      
    • xpath:

      new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='footer']")));
      new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
      

参考

您可以在以下位置找到一些相关的讨论:

  • Selenium Webdriver 和 Java。元素在点 (x, y) 处不可单击。其他元素将收到点击 https://stackoverflow.com/questions/44912203/selenium-web-driver-java-element-is-not-clickable-at-point-x-y-other-elem/44916498#44916498
  • 元素 MyElement 在点 (x, y) 处不可点击...其他元素将收到点击 https://stackoverflow.com/questions/44724185/element-myelement-is-not-clickable-at-point-x-y-other-element-would-receiv/44724688#44724688
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

org.openqa.selenium.ElementClickInterceptedException:在无头模式下使用 Selenium 和 Java 发生元素单击拦截错误 的相关文章

随机推荐

  • T-SQL 函数获取存储字符的 ASCII 值

    我正在使用 T SQL 块来获取存储在数据库列中的 ascii 字符转储 我知道在 Oracle 中使用 DUMP 函数可以轻松完成此操作 我不熟悉 SQL Server sytax 但我正在使用类似的东西 SET NOCOUNT ON C
  • 来自柏林噪声的每顶点法线?

    我正在 Opengl 几何着色器中生成地形 但在计算照明法线时遇到问题 我使用几何着色器中实现的柏林噪声函数动态生成每帧地形 因为这 我需要一种有效的方法来计算每个顶点的法线基于噪声函数 没有纹理或任何东西 我可以采用 2 条边的叉积来获取
  • 与简单的用户 ID 检查相比,声明/角色/策略授权的技术优势是什么?

    我使用 Identity Server 并通过策略和角色保护端点 这些反映在我分发给客户端的访问令牌中 今天 我收到建议 不要保护这样的方法 Authorize Policy Elevated HttpGet metadata public
  • CUDA 中的嵌套内核

    CUDA 目前不允许嵌套内核 具体来说 我有以下问题 我有N个M维数据 为了处理 N 个数据点中的每一个 需要按顺序运行三个内核 由于不允许嵌套内核 因此我无法创建调用三个内核的内核 因此 我必须串行处理每个数据点 一种解决方案是编写一个包
  • C++ 中短路 `operator<<` 输出

    我有一些代码散布着这样的结构 if debug Output lt lt f1 lt lt f1 lt lt n 现在我想做的是编写一个流类Debug我可以这样写 Debug lt lt f1 lt lt f1 lt lt n 如果设置了某
  • 简单的 TextView.setText 导致 40% CPU 使用率

    运行我的应用程序会导致我的手机 CPU 使用率达到约 40 final String position String format 02d 02d 02d time getHours time getMinutes time getSeco
  • Excel VBA 中的定时警报

    我在 Excel 2003 中制作了一个日历来跟踪任务和类似项目 我需要做的是通过 VBA 设置计时器 像这样的事情 run in x secs timetowait function to exec 有没有办法在 excel vba 中做
  • 如何用字符串替换缩写?

    我正在创建一个 XSL 文件 该文件将从 XML 文件中提取有关在我所在区域被拖走的汽车的信息 并按汽车被拖走的日期按升序对其进行排序 我需要在转换后的文件中显示拖车日期 车牌和汽车颜色 我的问题是每辆车的颜色都有缩写 我想要颜色的全名而不
  • 在NancyFx中获取url参数

    我正在使用 NancyFx 构建 Web API 但从 URL 获取参数时遇到一些问题 我需要向 API 发送请求 consumptions hourly from 1402012800000 tags 171 1342 5D to 140
  • 多个卷到单个目标目录?

    有没有办法从主机挂载多个卷以形成单个目标挂载点 有点像这样 docker run name ubuntu bash rm interactive tty volume media Large videos videos volume med
  • 将 GIT 与在多个位置具有目录的项目一起使用

    我正在尝试将 PHP MySQL Web 应用程序 基于 CodeIgniter 2 01 框架构建 移动到 GIT 存储库 问题是为了增加安全性 我实施了分离应用程序部分 应用程序和系统文件夹 和 Web 文件 index php 图像
  • 使用非虚拟析构函数扩展基类是否危险?

    在下面的代码中 class A class B public A class C public A int x int main int argc char argv A b new B A c new C in both cases on
  • Log4j2/JPA/Hibernate 日志记录不起作用

    我无法使用 log4j2 生成休眠日志消息 它仅记录信息和警告 另一方面 HikariCP 与此配置完美配合 这是 pom xml
  • vim 中的自适应 Tab 键

    我碰巧处理的代码中 某些模块使用制表符进行缩进 而其他模块则使用空格 许多文本编辑器 例如 Np 具有某种自适应制表符功能 如果前一行 或代码块 使用空格或制表符 视情况而定 则使用空格进行缩进 我还没有在 vim 中看到过这样的东西 有没
  • 如何在 MariaDB 容器中运行 cron?

    我想在 MariaDB 容器中包含一个基于最新映像的 cron 任务mariadb 但我坚持这个 我尝试了很多方法但没有成功 因为我无法同时启动 MariaDB 和 Cron 这是我实际的 dockerfile FROM mariadb 1
  • 在 Backbone 视图渲染上动态设置 className

    我有一个 Backbone 视图 其中 className 使用函数动态设置 app Views ItemRequestView Backbone View extend tagName tr className function var
  • 如何在React Native中从heic格式获取jpg图像

    我从图库中挑选照片并上传到服务器 但几天后我注意到有些照片的扩展名为 heic 并且浏览器无法渲染这些图像 1 有没有办法从上传的heic中提取照片 2 如何在React Native中从这种格式获取jpeg 您可以借助这个很棒的库在服务器
  • Android:在运行时更改矩形的颜色

    我有一个LinearLayout我有一个自定义视图 public class myView extends View Rect rects new Rect 30 30 80 80 Canvas myCanvas Override publ
  • 为什么 3 路合并比 2 路合并更有优势?

    维基百科 http en wikipedia org wiki Merge 28revision control 29 Three way merge表示 3 路合并比 2 路合并更不容易出错 并且通常不需要用户干预 为什么会这样呢 3 路
  • org.openqa.selenium.ElementClickInterceptedException:在无头模式下使用 Selenium 和 Java 发生元素单击拦截错误

    我有一个正在使用 java 和 selenium 的项目 在UI模式下测试工作正常 但是在无头模式下我收到此错误 org openqa selenium ElementClickInterceptedException element cl