点击问题

“元素不可点击”错误

ChromeDriver 点击的工作原理是:在元素的第一个客户端矩形(如果没有第一个客户端矩形,则为边界客户端矩形)的中间模拟鼠标点击。若要了解 ChromeDriver 尝试点击的位置,最简单的方法是打开 Chrome 开发者工具,然后在调用点击操作之前检查要点击的元素。在检查器中选择该元素,并注意表示该元素的客户端 rect 的蓝色方框,如下图所示。ChromeDriver 会尝试点击第一个广告的中间位置。

如果 ChromeDriver 抛出“元素不可点击”错误,则很可能是因为该位置用户实际上无法点击。如需进行测试,请将光标放在第一个客户端矩形的中间,看看该位置是否可点击。

在上例中,测试尝试点击锚点元素。在这种情况下,锚点不可点击;只有子图片可以点击。由于图片元素采用 margin-bottom 样式,锚点元素的中间会超出可点击的图片边界,因此 ChromeDriver 会抛出错误。如需详细了解如何确定位置/尺寸,请参阅 w3 规范。如需修复上述情况,请点击图片而不是锚点。

如果测试尝试执行以下操作,以下情况下经常会出现“元素不可点击”错误:

  • 点击其可点击的后代元素不在锚点边界内的锚点(如上)
  • 在另一元素下完整或部分点击某个元素
  • 在存在固定叠加层时点击屏幕外的元素(该元素将滚动到用户视野范围内,但可能会在固定叠加层下方滚动)
  • 点击中间不可点击的元素(例如,某些类型的凸起 SVG 元素)

这些问题通常可以通过以下方式解决:点击给定元素的子项、以编程方式移除或隐藏屏蔽元素;使用高级交互 API 点击元素左上角的偏移量;或者在 JavaScript 中模拟鼠标点击事件。

“元素不可点击”错误

最有可能发生这种情况的原因是,在 ChromeDriver 确定元素位置之后,到 ChromeDriver 实际发出对位置位置的点击之前,元素的位置发生了变化。

如需确定这是否是您的问题,请捕获点击异常,并立即记录元素的当前位置和大小。将该位置与 ChromeDriver 报告其尝试在异常中点击的位置进行比较,看看两者是否不同。如果是这样,您需要等待该元素停止移动或再次尝试点击。如果没有,请提交一个 bug 并在一个小型测试页(可用于重现您遇到的问题,即使只是偶尔会触发问题)上提交 bug。

ChromeDriver 无法点击移动的元素

ChromeDriver 不支持此功能。如果该元素最终停止,请等待其停止。如果元素一直不停止移动,ChromeDriver 不能保证点击会成功。