无法使用Watir访问DIV元素

时间:2015-02-27 17:00:18

标签: html ruby watir

您好我正在尝试使用watir访问DIV元素,但我无法做到这一点,我尝试过不同但无法访问它,可能是我认为需要通过某些父元素访问才能帮助我?

 My system Configurations
 IE-8
 Windows 7

enter image description here

我尝试使用以下命令                          @ie.div(:text,'COMPOSE').click 命令执行时没有错误,但没有对UI执行任何操作

2 个答案:

答案 0 :(得分:1)

最佳解决方案似乎是切换到Watir-Webdriver。使用Watir-Webdriver,@ie.div(:text,'COMPOSE').click将按预期工作。

假设这不是一个选项,有几个原因导致同一命令不适用于Watir(-Classic)v1.6.7:

  • 第一个问题是@ie.div(:text,'COMPOSE').click会找到包含此文本的第一个div。这将是你想要的div的祖先之一。因此,Watir将针对错误的元素发送click事件。
  • 第二个问题是div没有响应Watir触发的onclick事件。我不确定为什么会出现这个问题。

要解决第一个问题,在定位div时需要更具体。在这种情况下,可以使用“role”属性,因为没有祖先元素具有此属性。 Watir-Classic不支持将role属性用作定位器。因此,您需要使用元素集合和find方法创建自定义定位器:

@ie.divs.find{ |div| div.attribute_value('role') == 'button' && div.text == 'COMPOSE' }

为了解决第二个问题,事实证明双击确实有效。虽然较新版本的Watir-Classic实现了double_click方法,但1.6.7中并不存在。您可以通过调用fire_event方法复制方法:

.fire_event('ondblclick')

将所有内容放在一起,以下内容将单击撰写按钮:

@ie.divs.find{ |div| div.attribute_value('role') == 'button' && div.text == 'COMPOSE' }.fire_event('ondblclick')

答案 1 :(得分:0)

页面上可能有多个元素包含文字' COMPOSE'有些元素可能被隐藏。试试:

@ie.divs(:text,'COMPOSE').size

这是与s的div。 然后你可以尝试类似下面的内容,看看你是否在UI中进行了更改:

@ie.divs(:text,'COMPOSE').each { |b| b.fire_event('click') }

我记得fire_event效果更好,但建议您查阅文档,了解.clickfire_event之间的区别。