【问题标题】:Unable to Execute Watir Hover or Mouseover Main Nav Menu无法执行 Watir 悬停或鼠标悬停主导航菜单
【发布时间】:2012-08-30 13:28:30
【问题描述】:

我已经尝试在这里的论坛和谷歌群组搜索大约 2 天,但我发现没有一个有效。基本上,顶部导航菜单被放入以下 ​​HTML:

<div id="topNav">
<div id="headerLogo">  
<div id="mainNav">
<ul id="nav">
<li id="navTab01" class="manageUsers">
<a class="mainNavItem" title="Manage Users And Groups" href="#"> </a>
<ul class="dropdown" style="display: none;">
</li>
<li id="navTab02" class="manageContent">
<a class="mainNavItem current" title="Manage Content" href="#"> </a>
<ul class="dropdown" style="display: none;">
<li class="manageSubRegions">
<li class="manageBusinessDirectoryEntries">
<a class="dropdownItemHasFlyout current" href="/BusinessDirectoryEntry"> Business Directory</a>
<ul class="flyout" style="display: none; left: 224px;">
</li>
<li>
</ul>
</li>
<li id="navTab03" class="manageFinancials">
<li id="navTab04" class="runReports">
</ul>
</div>
</div>

我要操作的菜单项是 navTab002,它具有以下扩展 HTML:

<li id="navTab02" class="manageContent">
<a class="mainNavItem current" title="Manage Content" href="#"> </a>
<ul class="dropdown" style="display: none;">
<li class="manageSubRegions">
<a class="current" href="/SubRegion"> Regions</a>  
</li>
<li class="manageBusinessDirectoryEntries">
<a class="dropdownItemHasFlyout current" href="/BusinessDirectoryEntry"> Business    Directory</a>
<ul class="flyout" style="display: none; left: 224px;">
<li class="businessDirectoryEntryQuickAdd">
<a class="current" href="/BusinessDirectoryEntry/QuickAdd"> Quick Add</a>
</li>
<li class="manageBusinessCustomListings">
<a class="current" href="/BusinessDirectoryCustomListing"> Sectors</a>  
</li>
<li class="manageBusinessDirectoryProfileTypes">
<a class="current" href="/BusinessDirectoryProfileType"> Profile Types</a>
</li>
<li class="manageBusinessDirectoryPrivateTypes">
<a class="current" href="/BusinessDirectoryPrivateType"> Private Types</a>
</li>
<li class="displayOptions">
<a class="current" href="/DisplayOption">Display Options</a>
</li>
</ul>
</li>

我想在悬停(或鼠标单击)时单击下拉列表中的第三项,或者手动使用它。

java 脚本正在使用 hoverIntent,这(可能)对我造成了问题 - 不确定。

当我在手动运行期间使用控制台保存时,我得到:

DOMNode 已移除 DOMSubtreeModified DOMNodeInserted DOMSubtreeModified DOMNode 已移除 DOMSubtreeModified DOMNodeInserted DOMSubtreeModified DOMNode 已移除 DOMSubtreeModified

无数次。

这是我用 ruby​​ Watir 尝试过的编码日志:

irb(main):001:0> require 'watir'
=> true
 <Watir::Browser.start("http://services.leedsgrenville.com/")
=> #<Watir::IE:0x4c618ca8 url="http://services.leedsgrenville.com/" title="Admin
istration">
<ink(:index, 1).attribute_value("/BusinessDirectoryEntry")
NoMethodError: undefined method `li' for main:Object
    from (irb):3
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):004:0> browser.li(:text, 'Manage Users & groups').link(:index, 1).at>
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["li"], :text=>"Manage Users & groups"}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:135:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:31:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:136:in `each_element'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:21:in `block in each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:147:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:33:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:63:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:407:in `attribute_value'
    from (irb):4
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):005:0> browser.li.flash
=> nil
irb(main):006:0> browser.li(id => "navTab02").flash
NameError: undefined local variable or method `id' for main:Object
    from (irb):6
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):007:0> browser.li(id => "navTab02").flash
NameError: undefined local variable or method `id' for main:Object
    from (irb):7
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):008:0> browser.li(index, 2).flash
NameError: undefined local variable or method `index' for main:Object
    from (irb):8
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):009:0> browser.li(index, 2)
NameError: undefined local variable or method `index' for main:Object
    from (irb):9
    from C:/Ruby193/bin/irb:12:in `<main>'
<nk(:text, /Manage Content/).fire_event('onmouseover')
=> ""
<(:text, /Manage Content/).fire_event('onmouseover')
=> ""
<(:text, /Manage Content/).fire_event('onmouseover')
=> ""
irb(main):013:0> browser.link(:text, /Manage Content/).flash
=> nil
irb(main):014:0> browser.link(:text, /navTab01/).flash
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["a"], :text=>/navTab01/}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:280:in `flash'
    from (irb):14
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):015:0> browser.link(:text, /navTab01/).flash
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["a"], :text=>/navTab01/}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:280:in `flash'
    from (irb):15
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):016:0> browser.link(:text, /Manage Content/).flash
=> nil
irb(main):017:0> browser.link(:text, /Manage Content/).flash
=> nil
irb(main):018:0>
<(:class => 'manageContent', :text => 'Manage Content').link.click
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["li"], :class=>"manageContent", :text=>"Manage Content"}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:135:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:31:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:136:in `each_element'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:21:in `block in each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c 
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:147:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:33:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:63:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:412:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:269:in `click!'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:211:in `click'
    from (irb):19
    from C:/Ruby193/bin/irb:12:in `<main>'
<(:class => 'manageContent', :text => 'Business Directory').link.click
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["li"], :class=>"manageContent", :text=>"Business Directory"}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:135:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:31:in `document'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:136:in `each_element'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:21:in `block in each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:20:in `each'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/locator.rb:147:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:33:in `locate'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:63:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:412:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:269:in `click!'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:211:in `click'
    from (irb):20
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):021:0> browser.div(:id, "mainNav").fire_event "onmouseover"
=> ""
irb(main):022:0> browser.div(:id, "mainNav").fire_event "onmouseover"
=> ""
irb(main):023:0> browser.link(:id => "navTab01").click
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["a"], :id=>"navTab01"}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:412:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:269:in `click!'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:211:in `click'
    from (irb):23
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):024:0> browser.link(:class => "manageUsers").click
Watir::Exception::UnknownObjectException: Unable to locate element, using {:tag_
name=>["a"], :class=>"manageUsers"}
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:66:in `assert_exists'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:412:in `perform_action'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:269:in `click!'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:211:in `click'
    from (irb):24
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):025:0> browser.div(:id, "mainNav").hover
NoMethodError: undefined method `hover' for #<Watir::Div:0x30b3610>
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.1.0/lib/watir-c
lassic/element.rb:431:in `method_missing'
    from (irb):25
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):026:0> class Watir::Element
irb(main):027:1> def hover
irb(main):028:2> assert_exists
irb(main):029:2>
irb(main):030:2*   driver.action.move_to(@element).perform
irb(main):031:2> end
irb(main):032:1> end
=> nil
<ll(:text, "Manage Content").fire_event("onmouseover")
NoMethodError: undefined method `cell' for #<Watir::IE:0x3276978>
    from (irb):33
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):034:0> require 'WET'
LoadError: cannot load such file -- WET
    from C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:i
n `require'
    from C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:i
n `require'
    from (irb):34
    from C:/Ruby193/bin/irb:12:in `<main>'

实际的 Java 代码是:

$("#mainNav, #mainNavDropdown").hoverIntent(
{
    interval: 200,
    timeout: 1000,
    over: function()
    {
        $(this).addClass("over");
        $("#mainNavDropdown").stop(true, true).slideDown(500,
                 function()
                 {
                     $(this).css("height", ""); // Make sure animation didn't screw up
                 });
    },
    out: function()
    {
        $(this).removeClass("over");
        if (!$("#mainNav, #mainNavDropdown").hasClass("over"))
            $("#mainNavDropdown").stop().slideUp(500,
                function()
                {
                    $(this).css("height", ""); // Make sure animation didn't screw up
                });
    }
});

// Hide the menu on body click
$("body")
    .click(function(evt)
    {
        if ($(evt.target)
                .parents()
                .andSelf()
                .filter("#mainNav, #mainNavDropdown").length == 0)
            $("#mainNavDropdown").stop().slideUp(300,
                function()
                {
                    $(this).css("height", ""); // Make sure animation didn't screw up
                });
    });

如果有人可以尝试帮助我,那就太棒了!

【问题讨论】:

  • 您能否创建一个测试页面或提供该页面的登录信息?如果没有可用的东西,这些类型的问题很难调试。
  • 您可以在 crasustainability2011.com/en/index.asp 找到一个类似的站点 - 我无法让您看到实际站点,因为它是私有的 :( 但是该站点在菜单方面提供了类似的功能。希望对您有所帮助跨度>
  • 在 CRA 页面上,哪个链接的级别与您需要实现的级别相似?我已经能够执行“可持续发展服务 > 服务”,但在执行“可持续发展服务 > 项目亮点 > EHS 管理支持”时遇到了一些问题。

标签: java drop-down-menu hover mouseover watir


【解决方案1】:

要使用 watir 悬停,请尝试以下操作:

browser.element(:attribute, 'value').fire_event 'mouseover'

当然用你的值替换元素、属性和值。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2015-09-03
    • 2012-12-16
    • 2013-07-16
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2012-10-31
    相关资源
    最近更新 更多