您好我正在尝试使用watir访问DIV元素,但我无法做到这一点,我尝试过不同但无法访问它,可能是我认为需要通过某些父元素访问才能帮助我?
My system Configurations
IE-8
Windows 7
我尝试使用以下命令
@ie.div(:text,'COMPOSE').click
命令执行时没有错误,但没有对UI执行任何操作
答案 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时需要更具体。在这种情况下,可以使用“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
效果更好,但建议您查阅文档,了解.click
和fire_event
之间的区别。