使用Watir Webdriver单击图像映射区域时的ElementNotVisibleError

时间:2014-05-08 22:49:45

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

我正在使用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

1 个答案:

答案 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中定义。我建议使用maparea方法而不是通用element方法。它更容易阅读,更少键入并确保您可以访问任何特定于元素的方法(尽管在这种情况下没有)。

以上代码可以简化为:

map = browser.map
area = map.area
area.fire_event('onclick')