使用Capybara悬停硒元素

时间:2017-08-07 13:45:50

标签: ruby selenium-webdriver capybara

我正在尝试将鼠标悬停在元素上,但看起来悬停不能按预期工作。示例网站:https://www.covergirl.com/en_us/

我正在尝试将鼠标悬停在第3个菜单项(FACE)上。

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

这似乎悬停在元素上,因为我可以将项目加下划线,但菜单无法打开。

1 个答案:

答案 0 :(得分:1)

我假设您正在使用含有硒的Chrome。

您可以看到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)