【问题标题】:Unable to hover using fire_event and .hover无法使用 fire_event 和 .hover 悬停
【发布时间】:2014-09-18 01:09:18
【问题描述】:

以下是 HTML 内容。在使用 watir 悬停时,我需要手动显示以下列表。

<li class=" dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown" ceid="MM - Tour" href="/product-tour">
      Tour 
      <b class="caret"/>
    </a>
    <ul class="dropdown-menu dropdown-tour depth-1 row">
      <li class=" col-md-3">
      <li class=" col-md-3">
      <li class=" col-md-3">
      <li class=" col-md-3">
    </ul>
</li>
  1. 在使用 fire_event "onmouseover" 时,在 irb 中返回 true。但是不执行悬停并且不显示列表。下面是 irb 输出。

    irb(main):035:0> b.link(:text => 'Tour').present?
    => 真的
    irb(main):036:0> b.link(:text => 'Tour').fire_event "onmouseover"
    => 真的

  2. 在使用 .hover 时,遇到以下错误。

    Selenium::WebDriver::Error::InvalidElementStateError:无法执行本机交互:无法加载本机事件组件。 来自 [远程服务器] file:///C:/Users/SRIRAM~1/AppData/Local/Temp/webdri ver-profile20140917-6780-x3gs6b/extensions/fxdriver@googlecode.com/components/dr iver_component.js:9770 :3:在`generateErrorForNativeEvents'中

以下是我的 gems 版本。

watir-webdriver (0.6.10)
selenium-webdriver (2.42.0)

Firefox Browser version : 30.0

还有其他方法可以使用 watir webdriver 执行此鼠标悬停吗?

问候,
阿维纳什·杜吉拉拉

【问题讨论】:

  • 也许尝试将您的 Firefox 和 Selenium-WebDriver 升级到最新版本?从CHANGES doc 开始,Firefox 30 中可能不支持原生事件。Selenium 2.42.0 已更新为支持 Firefox 29,Selenium 2.43.0 支持 Firefox 24、31 和 32 的原生事件。
  • @JustinKo 这没有通过问题解决。我将 selenium webdriver 升级到(2.43.0)并将我的 FF 升级到 32,但效果不佳。即使我尝试将 Firefox 降级到版本 24,即使这种组合也没有成功。还有其他选择吗??
  • @JustinKo 我尝试使用 Selenium element = driver.find_element(:css => '#main_menu ul.nav.navbar-nav.navbar-right>li:nth-child(2)>a' ) driver.action.move_to(element).perform 即使这只是让覆盖层闪烁一秒钟。从 Watir 的角度等待您的回复!
  • driver.action.move_to(element).perform 正是 Watir 中的 hover 方法所做的。这就是为什么你会得到相同的行为。

标签: ruby selenium-webdriver cucumber watir watir-webdriver


【解决方案1】:

看起来在使用hover 时,下拉菜单会显示一秒钟然后消失。页面似乎认为鼠标已移至 Tour 链接,然后移开。鉴于 hover 在 Chrome 中工作,我可能会说这是 Firefox 驱动程序的问题。

您可以通过使用 Javascript 强制显示下拉菜单来解决此问题 - 即将显示样式从“无”更改为“阻止”:

dropdown = b.link(:text => 'Tour').parent.ul
b.execute_script('arguments[0].style.display="block";', dropdown)

【讨论】:

  • 答案真的很棒。它工作完美。非常感谢贾斯汀
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多