2013-03-21 51 views
2

我有以下几点:检索span元素的文本中的Watir webdriver的

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

任何想法?

+3

基于html结构,我猜测它是一个下拉菜单。如果是这样,您需要展开菜单,然后才能点击任何链接(即Watir只能与用户可见的元素进行交互)。 – 2013-03-21 16:21:44

回答

7

如果您可以指向问题可重现的页面,这将有所帮助,即使这意味着您自己创建一个页面,将其放入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无法在页面上找到并投诉。

+1

你是对的,我没有意识到Watir在执行方法之前不会创建对象。 我的问题是,正如@Justin Ko所说,这是一个下拉菜单,我没有等到它真的出现。 谢谢你的回答!它仍然教给我一些关于Watir的信息。 – MichaelR 2013-03-24 08:09:59

相关问题