4

我有以下内容:

<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"}

有任何想法吗 ?

4

1 回答 1

11

如果您可以指出问题可重现的页面,这将有所帮助,即使这意味着您自己创建一个页面,将其放入保管箱并公开。

您是否甚至尝试使用您发布的 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 在页面上找不到它并抱怨。

于 2013-03-21T12:35:07.587 回答