从watir webdriver中的span元素中检索文本

Mic*_*elR 3 watir watir-webdriver

我有以下内容:

<ul class="a">
  <li class="b">
    <a class="c">
      <span class="d">
        <strong>text</strong>
      </span>
    </a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我正试图从跨度中获取"文本".

当我尝试:

puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d')
Run Code Online (Sandbox Code Playgroud)

我把span元素拿回来了.#<Watir::Span:0x007fa1d11edb18>我应该这样做.

但在尝试时:

puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d').text
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说:

unable to locate element, using {:class=>'b', :tag_name=>"li"}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

Žel*_*pin 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"
Run Code Online (Sandbox Code Playgroud)

据我所知,你很惊讶当你提供一些代码时,Watir返回一个元素,但是当你想对元素执行一个方法时,它会抱怨它无法找到该元素.

仔细查看代表页面元素的ruby对象:

#<Watir::Span:0x..fa66c75ff618434cc located=false selector={:class=>"d", :tag_name=>"span"}>
Run Code Online (Sandbox Code Playgroud)

请注意located=false.据我所知,这意味着watir在尝试访问它之前会创建一个ruby对象,因此代码的第一行不会引发任何异常.但是当你尝试使用该元素时,watir无法在页面上找到并抱怨.