使用 Capybara 悬停硒元素

Hover selenium element using Capybara

我试图将鼠标悬停在某个元素上,但看起来悬停没有按预期工作。示例站点:https://www.covergirl.com/en_us/

我试图将鼠标悬停在第三个菜单项 (FACE) 上。

find('.global-header__list-link', wait: 5, match: :first, text: 'FACE').hover

这似乎悬停在元素上,因为我可以在带下划线的项目上显示,但菜单打不开。

我假设您使用的是 Chrome 和 selenium。

您可以看到实际上设置了 hover 状态,因为当您在元素上调用 hover 时,单词 "FACE" 变成了下划线。不起作用的是菜单所依赖的任何事件都没有生成。在不深入挖掘的情况下,我猜该事件是 mouseenter 事件,因为 chromedriver 有一个已知问题,它在移动到元素时不会生成 mouseentermouseleave 事件(但会生成 mouseover 个事件)。如果您将 Firefox 与 selenium 一起使用,而不是 Chrome,您会发现菜单在那里工作正常。

如果您需要继续使用 Chrome,您应该可以使用

之类的方法解决此问题
el = find('.global-header__list-link', wait: 5, match: :first, text: 'FACE').hover
execute_script("
  var evt = new MouseEvent('mouseenter', { bubbles: false, cancelable: true, view: window });
  arguments[0].dispatchEvent(evt);
", el)