mootools,watir webdriver onmouseover不起作用

时间:2011-12-05 12:30:27

标签: mootools webdriver watir onmouseover watir-webdriver

我的测试表明,当页面有mootools lib时,webdriver fire_event(“onmouseover”)不起作用。 删除mootools lib时,fire_event(“onmouseover”)生效。 我怎样才能获得解决方法?

html页面如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type='text/javascript' src='http://demos111.mootools.net/demos/mootools.svn.js'></script></head>
<body>
    <div onmouseover="document.getElementById('id6').style.display='block';" 
        onmouseout="document.getElementById('id6').style.display='none';"
        style="overflow:hidden;" id="id61" class="trbgcolor0">
        <div style="height: 18px;">
                <div style="float: left; ">
                        <b>plan category 2682</b>
                        <a class="unline"> add 1</a>
                </div>

                <div style="display: none;" id="id6">
                        &nbsp;|&nbsp;<a class="unline">edit 1</a>
                        |&nbsp;<a class="unline">delete</a>
                </div>
           </div>                                                
    </div>
</body>
</html>

watir正在关注:

require "rubygems"
require "watir-webdriver"

require 'test/unit'

class TC_article_example < Test::Unit::TestCase

  def test_search

    browser = Watir::Browser.new :firefox
    browser.goto("http://192.168.88.120/mgt/login/t2.html")

    sleep 1
    oo = browser.div(:id=>"id61")    
    oo.fire_event "onmouseover"
    puts "2  001 "
  end

end

2 个答案:

答案 0 :(得分:2)

我倾向于向mootools人询问这个问题,我猜它会以某种方式拦截事件,因此当你触发它时,浏览器元素永远不会“看到”它,但这只是猜测。

他们的工具也可能是添加一些其他类型的CSS逻辑或其他一些管理这个项目是隐藏还是可见的东西,我已经看到很多规则使用元素类型和类的组合以及:将psuedoclass悬停以实现菜单

对于仅使用CSS来控制元素可见性的控件,我还没有找到一种方法(尚未)导致在浏览器级别识别的'悬停'状态,以便CSS:hover规则采用效果并导致菜单元素出现。

解决方案可能是通过基本上执行通过onmouseover触发的相同脚本代码来强制更改元素的可见性,并查看是否显示该元素。

browser.execute_script("document.getElementById('id6').style.display='block';")

如果这不起作用,您可以通过临时更改特定样式控件来操作CSS级别的内容。我通过Jquery(因为我们的应用已经使用它)使用这种通用格式

完成了这个
browser.execute_script("jQuery('CSS-Rule-Name').css({display: 'block'});")

在我的特定情况下,公开所有下拉菜单的代码最终看起来像这样

browser.execute_script("jQuery('.navigation #secondary_nav > li ul.tertiary_nav').css({display: 'block'});")

当然,这必须适应您的代码,因为CSS规则可能会有所不同。我找到规则的方法是使用开发人员工具,在dom中为菜单选择容器元素,然后选择“trace styles”并展开“display”属性,该属性应该为您提供特定的CSS规则(在我的例子中)是.navigation #secondary_nav > li ul.tertiary_nav)控制元素的显示(通常是'none'或'block')。 (将添加:hover的其他类似规则在浏览器确定鼠标悬停在适用元素上时生效。

它只是一点点kludge,但它可以完成所需的操作,这使得菜单项可见,因此您可以使用.click方法之类的东西。

如果该操作不会导致页面刷新,您可以使用相同的脚本再次隐藏菜单,但将其设置为“none”而不是“block”

答案 1 :(得分:0)

工作单是:browser.execute_script(“abc(true)”)

onmouseover="abc(true);" 
onmouseout="abc(false)"