ElementNotInteractableException:元素不可交互:自升级到 chromedriver 83 以来,元素的大小为零

Rob*_*ean 18 selenium-chromedriver docker

我使用以下 docker 图像来运行我的黄瓜测试:

https://hub.docker.com/r/selenium/standalone-chrome/

不幸的是,从今天开始,似乎每当我运行测试时都会出现以下错误。它们出现在每次测试开始时。我在页面上做什么并不重要。

**13:38:26 [exec] org.openqa.selenium.ElementNotInteractableException:元素不可交互:元素大小为零

13:38:26 [exec](会话信息:chrome=83.0.4103.61)**

我做了一些挖掘,我注意到 chromedriver 版本从 81 更新到 83。我设法通过使用来自具有 chromedriver 81 的 docker hub 链接的旧 docker 映像解决了这个问题。但是如果我再次尝试使用 chromedriver 83,它将不行。

有人遇到过这种情况么?由于更新,我需要添加新的 chrome 选项吗?

小智 19

该问题的根本原因是 Chrome 不会滚动到视口外的元素。取而代之的是,Chrome 尝试在查看区域之外单击它。这就是问题出现的原因。这绝对是 Chrome 83 的问题,因为我没有在 Chrome 81 上遇到它。

此外,我在 Windows 机器上没有这样的问题,它只在 Linux 上重现(我使用的是 selenoid docker 图像)。

通过 JS 单击的解决方案不是最好的选择,因为通过 JS 您可以单击任何地方,即使对于不可单击的元素(例如与其他对象重叠)。这是一个不安全的操作。

相反,我建议在单击之前和本机 click() 之后滚动到元素;它会完美地工作。

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].scrollIntoView(true);", element);    
element.click();
Run Code Online (Sandbox Code Playgroud)

  • 这个答案很好,但是您可以使用selenium“move_to_element”选项,如下所示,而不是使用javascript滚动: from selenium.webdriver.common.action_chains import ActionChains ActionChains(driver).move_to_element(element).perform() element.click( ) (4认同)

小智 6

--window-size当我使用无头铬时,我通过使用参数解决了这个问题。例如chrome --headless --window-size=400,800

我不知道发生了什么变化,也不知道为什么这是一个足够的解决方法。


Wae*_*l.B 5

我也收到此错误,我进行了一些挖掘,发现元素大小包含 0,例如,如果您想单击它,大小为 200 x 0 的元素会出现此错误。这不是 docker 唯一的错误,我在本地 chrome 83 上得到了它。

尝试使用 Javascript Executor 单击元素:

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
Run Code Online (Sandbox Code Playgroud)