我有以下内容:
<ul class="a">
<li class="b">
<a class="c">
<span class="d">
<strong>text</strong>
</span>
</a>
</li>
</ul>
我正试图从跨度中获取“文本”。
当我尝试:
puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d')
我得到了span
元素。我应该#<Watir::Span:0x007fa1d11edb18>
。
但是在尝试时:
puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d').text
我得到一个错误说:
unable to locate element, using {:class=>'b', :tag_name=>"li"}
有什么想法吗?
答案 0 :(得分:9)
如果您可以指向问题可重现的页面,这将有所帮助,即使这意味着您自己创建页面,将其放在Dropbox中并公开。
您是否尝试使用已发布的html和ruby代码复制问题?我问,因为问题不能与提供的代码重现。看看你自己:
> browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d')
=> #<Watir::Span:0x..fa66c75ff618434cc located=false selector={:class=>"d", :tag_name=>"span"}>
> browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d').text
=> "text"
据我所知,当你提供一些代码时,你会感到惊讶,Watir返回一个元素,但是当你想对元素执行一个方法时,它会抱怨它找不到元素。
仔细查看代表页面元素的ruby对象:
#<Watir::Span:0x..fa66c75ff618434cc located=false selector={:class=>"d", :tag_name=>"span"}>
请注意located=false
。据我所知,这意味着watir在尝试访问它之前会创建一个ruby对象,因此代码的第一行不会引发任何异常。但是当你尝试使用该元素时,watir无法在页面上找到并抱怨。