如何配置无头 Chromedriver 来模拟悬停设备?

Man*_*cob 5 selenium capybara selenium-chromedriver selenium-webdriver

在我的应用程序中,某些元素仅应在设备支持悬停时出现。因此,我使用以下 CSS:

\n\n
@media(hover: none) {\n  #present-only-if-device-supports-hover {\n    display: none;\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了使用 Capybara 进行测试,我\xe2\x80\x99d 喜欢模拟具有悬停功能的设备。到目前为止,我只能让它在非无头模式下工作。

\n\n

我使用以下检查:

\n\n
expect(page).to have_selector('#present-only-if-device-supports-hover', visible: true)\n
Run Code Online (Sandbox Code Playgroud)\n\n

有了 driver :selenium_chrome,检查就通过了。不过,与司机:selenium_chrome_headless,检查会失败,因为该元素不可见。

\n\n

(作为旁注:Capybara::Node::Element#hover适用于两个驱动程序。)

\n\n

我尝试了一些方法,但\xe2\x80\x99并没有改变这种行为:

\n\n
    \n
  • 我使用 启用了设备模拟options.add_emulation(device_metrics: {width: 800, height: 800, pixelRatio: 1, touch: false}),因为禁用触摸似乎可以启用悬停。确实,改变:touch为true使其停止在非无头模式下工作。但在无头模式下,两者都不起作用。
  • \n
  • 我尝试将webkit.webprefs.available_hover_types和webkit.webprefs.primary_hover_type首选项(我在 Chromium 代码检查期间发现的)设置为1,但它没有\xe2\x80\x99t 有任何效果。我也尝试过离开webkit.webprefs.。
  • \n
\n\n

更多建议?

\n