隐藏可见性时如何检索隐藏元素

时间:2016-05-04 05:41:16

标签: ruby watir watir-webdriver

我想在隐藏visibiility属性时检索隐藏文本:

starting lock
After locking index is: 100
myMap.size()=0

我试过了:

<div id = "tt52433002" class="yui-module yui-overlay yui-tt yui-overlay-hidden" style="z-index: 2; visibility: hidden;">
<div class="bd">Associated with the domain : testci20160503105556.com</div>
</div>

browser.hidden(:class, 'bd').text

但是我收到了这个错误:

browser.hidden(:class, 'bd').value

2 个答案:

答案 0 :(得分:1)

Watir旨在像用户一样行事。因此,如果用户无法在元素中看到文本,那么Watir将不会返回元素的文本。

此外,您要查找的元素是div而不是hidden

如果您需要文本,可以这样做:

browser.div(class: 'bd').inner_html

进行JavaScript调用以提供结果。

这有效:

browser.div.attribute_value('id') => tt52433002

就像这样:

browser.div(class: 'bd').inner_html[/testci\d{14}/] => testci20160503105556

答案 1 :(得分:0)

首先要做的事情。该错误表示Watir无法使用您指定的条件查找元素。这意味着要么在DOM中的任何地方都不存在这样的东西,要么它可能在框架内。

由于您想要的元素是div,那么您应该使用.div方法来访问它

browser.div(:class => 'bd')   #finds first matching div

如果该类名不是非常独特,则可能会出现第二个问题。除非您指定其他参数,例如索引,或者div可能包含的部分文本,否则您可能找不到要查找的div。一个快速的调试技巧(我喜欢从IRB做)是获取匹配的div的集合并检查大小

div_count = browser.divs(:class => 'bd').size
puts "there are #{divcount} divs of class bd in the dom"

如果计数超过1,那么您可能需要更改选择方式以确保获得正确的计数。例如

browser.div(:class => 'bd', :text => /Associated with the domain/)

如果计数为零,则检查帧

frame_count = browser.frames.size
iframe_count = browser.iframes.size

如果有框架,你必须告诉watir在div的框架内查看,如果有多个框架,那么请确保指定正确的框架

browser.frame.div(:class => 'bd')  #looks for div inside first frame

一旦你确定你拥有正确的div,那么你应该能够使用像.text这样的方法或者使用另一个答案.inner_html来获取div的内容。