【问题标题】:watir-webdriver element.hover, on windows, activates hover but for only a split secondwatir-webdriver element.hover,在 Windows 上,激活悬停但仅一瞬间
【发布时间】:2017-03-08 10:51:22
【问题描述】:

我正在使用 RubyCucumber 对 Web 应用程序进行功能测试。我正在使用watir-webdriver 来驱动网络浏览器。

我的网络应用程序有一个导航菜单,其中包含一个导航链接,当鼠标悬停在上面时会显示一个选项菜单。

我正在尝试使用 watir-webdriver element.hover 方法来触发悬停事件。 Ruby gems 中的 watir-webdriver 版本目前似乎不包含 this commit 以向元素添加悬停事件,但是我猴子修补了元素类以添加此功能。

在我的 Mac 上使用 Chrome 运行我的测试时,一切都很好。悬停甚至被触发,我可以单击显示的结果菜单中的链接。

但是,当我在同事的 Windows 机器上设置 Ruby 环境时,我们没有得到相同的结果。使用 Firefox,悬停事件确实会触发,但是,只是一瞬间,然后下拉菜单消失了。这会导致测试失败,因为以下黄瓜步骤会尝试单击下拉菜单中存在的链接,但该链接已不存在。

所以我的问题是这样的:

有谁知道在 Windows 上使用 Cucumber 和 watir-webdriver 时如何确保在调用 element.hover 后保持悬停状态?

【问题讨论】:

  • 否,但您可以改为触发 click 事件。我曾经有一个问题,与鼠标在显示菜单上的移动方式有关。解决方案是单击它们。一般来说(我的观点),导航和菜单测试的价值很低。您可以跳过它们,在有限数量的操作系统/浏览器集上运行它们,或者将其保存以进行手动测试。祝你好运。
  • 没错,这个测试是否增加了很多价值是有争议的。但我正在尝试将 BDD 方法引入到基本上具有零功能测试的现有应用程序中。第一个也是最简单的故事之一是悬停导航菜单。所以我们只是想把事情做好。感谢您的 cmets 伙伴。

标签: ruby windows firefox watir-webdriver


【解决方案1】:

我已经看到(在 .hover 方法存在之前)“悬停”状态反应是通过 CSS psuedoclass。引入.hover 是为了尝试提供一种解决方法。如果这是您的情况并且对您不起作用,那么create an issue with the watir-webdriver Github project 可能会很好。

对于大多数在 HTML/Javascript 中使用 'onhover' 事件的东西来说,对对象触发 'onhover' 事件就足够了,我很好。这是我们大多数人在最近添加.hover 之前所做的。但是对于基于 CSS 的东西,该死的浏览器似乎几乎立即“看到”实际的鼠标不在对象上,并重新声明基本 CSS 类的显示设置。

所以您可以在 DOM 中找到该元素,只是无法点击它,因为它没有显示出来。 (这是一个合理的限制,因为在那种状态下没有用户可以点击它)

我们已经讨论了解决这个 in the issue that caused element#hover to get added to watir-webdriver. 的方法,您可以尝试那里的一些建议,也许将鼠标移动到对象上,但这些方法有点实验性。

我之前使用的另一个解决方案是使用 execute_script 执行一个 jquery 调用,该调用更改了对象的“非悬停”类的 CSS 以使其可见,然后可以有机地单击它。在点击操作不会导致系统导航到新页面的情况下,这是一个很好的解决方案。

对于菜单项是简单链接的情况,我建议从链接中获取 HREF 值,然后使用“browser.goto”将浏览器发送到那里。您可以像单击它时一样识别链接,因此不必在代码中硬编码链接目标,您只是在解决我们不会让您单击隐藏元素的事实(有充分的理由)如果 .hover 不起作用,那将是我的首选,如果它是一个简单的链接,它将指向一个 href 而不是花哨的客户端东西。

【讨论】:

  • "在导致 element#hover 的问题中..." 链接已失效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2023-03-16
相关资源
最近更新 更多