在浏览器模式下一切正常时,为什么Watir Chrome无头“无法在(x,y)点单击”?

jbk*_*jbk 1 watir google-chrome-headless

我有一个用Ruby编写的使用Selenium,W​​atir和ChromeDriver的抓取脚本,在Chrome浏览器窗口中都可以正常工作,但是试图以无头模式运行却很成功。

Selenium::WebDriver::Error::UnknownError: unknown error: Element <input id="desired_element" type="checkbox" name="desired_element" checked="checked"> is not clickable at point (660, 594). Other element would receive the click: <html lang="en">...</html>
Run Code Online (Sandbox Code Playgroud)

我正在使用Watir 6.8和最新的Chromedriver 2.33。

任何想法在无头与无头时页面的不同行为背后是什么,我该如何处理?

Chu*_*den 5

错误消息显示“其他元素将获得点击:”时,它告诉您问题出在哪里。

这意味着屏幕上的其他元素覆盖了您尝试与之交互的复选框。可能是由于无头模式下的默认浏览器大小与无头模式下的浏览器的默认大小不同导致的元素排列方式不同

我们可以通过询问无头模式和普通模式下的窗口大小并查看结果值是否相同来验证是否是这种情况。

size = browser.window.size
puts "The browser window is #{size.width} wide by #{size.height} high"
Run Code Online (Sandbox Code Playgroud)

有几种可能的方法可以解决此问题:

  1. 指定或更改浏览器“窗口”的大小。例如 browser.window.resize_to 1024, 768

    我更喜欢这样做,并且通常有一个命令,例如在初始化浏览器后立即设置浏览器大小。设置为您的网站支持的最小尺寸或建议的最小尺寸

  2. 使用另一种方法“单击”复选框,例如在其上发送空格 @browser.checkbox(name: "desired_element").send_keys " "

    我不喜欢这样做,因为它不能真正解决问题的根源,并且随着脚本的进行,您可能会遇到与网站上其他元素交互的其他类似问题。