我的测试表明,当页面有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">
| <a class="unline">edit 1</a>
| <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
答案 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)"