我正在使用Watir Webdriver,我正在尝试点击HTML图像地图上的某个区域。找到单个区域(exists? == true)
但会出现错误,告诉我element is not visible
:
> fxdriver.preconditions.visible': Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotVisibleError)
html看起来像这样:
<map name="Map">
<area onclick="javascript:Next('1k59elae');" coords="2,5,65,90">
<area onclick="javascript:Next('kaxfrfzy');" coords="67,5,131,90">
</map>
我尝试点击这样:
browser = Watir::Browser.new :firefox
map = browser.element(:tag_name => 'map')
area = map.element(:tag_name => 'area')
area.click
答案 0 :(得分:2)
我对Selenium-Webdriver的实现没有足够的了解,以了解异常发生的原因。也许这只是一个疏忽或错误 - 几个人似乎有同样的问题(见Issue 2354)。
然而,在使用类似的地图时,我找到了两个解决方法。
解决方案1 - 添加形状属性
当area元素没有shape属性时,我遇到了同样的异常。添加shape属性(到html)后,单击按预期工作。如果您可以控制页面,我建议明确指定形状:
<map name="Map">
<area onclick="javascript:Next('1k59elae');" coords="2,5,65,90" shape="rect">
<area onclick="javascript:Next('kaxfrfzy');" coords="67,5,131,90" shape="rect">
</map>
解决方案2 - 手动触发事件
如果更改标记不是一个选项或不起作用,另一个解决方案是手动触发onclick事件。这是通过使用Watir的fire_event
方法完成的:
map = browser.element(:tag_name => 'map')
area = map.element(:tag_name => 'area')
area.fire_event('onclick')
<强>除了强>
地图和区域元素类型在Watir-Webdriver中定义。我建议使用map
和area
方法而不是通用element
方法。它更容易阅读,更少键入并确保您可以访问任何特定于元素的方法(尽管在这种情况下没有)。
以上代码可以简化为:
map = browser.map
area = map.area
area.fire_event('onclick')