2012-03-05 72 views
2

我试图使用索引来访问一个li元素元素的Watir-的webdriver:访问使用索引

<div class="item-list"> 
<ul> 
<li class="views-row views-row-1 views-row-odd views-row-first"> 
<li class="views-row views-row-2 views-row-even"> 
<li class="views-row views-row-3 views-row-odd"> 
<li class="views-row views-row-4 views-row-even"> 
<li class="views-row views-row-5 views-row-odd"> 
<li class="views-row views-row-6 views-row-even"> 
<li class="views-row views-row-7 views-row-odd"> 
<li class="views-row views-row-8 views-row-even"> 
<li class="views-row views-row-9 views-row-odd views-row-last"> 
</ul> 
</div> 

我使用的代码是

@browser.div(:class,'item-list').ul.li(:index => 2) 

的问题是:这是一个元素页面,我将使用循环访问每个元素。我想用索引会解决这个问题,但是当我写我的代码并执行它,我收到以下错误

expected #<Watir::LI:0x2c555f80 located=false selector={:index=>2, :tag_name=>"li"}> to exist (RSpec::Expectations::ExpectationNotMetError) 

我如何可以访问使用索引这些元素。

+1

你试过.LIS [2]? – pguardiario 2012-03-05 11:56:46

+0

它的作品!!!!!你能解释为什么它不能使用li(:index => 2)来访问元素。感谢您的帮助pguardiario – NewTester 2012-03-05 12:09:55

+1

div定位器在下面创建一个包含所有li元素的数组后,使用“lis”复数形式。你说的是:在这个特定div中的所有li元素中创建一个数组,现在告诉我哪个是第三个([2])。数组使用0-索引,所以[2]给你第三个li。下面我的答案显示了一个“.each do”方法,其工作方式相同。 – 2012-03-05 16:18:13

回答

4

如果你有很好的课堂命名,忘记索引!请在“意见行”参数部分匹配:

@browser.li(:class => /views-row-1/) 

这可以很容易地进行参数的循环(虽然我不知道你用的信息做什么,所以这个循环不会是非常令人兴奋的做)。

x = 0 
until x==9 
    x+=1 
    puts @browser.li(:class => /views-row-#{x}/).text 
end 

您也可以通过李鸿章的盲目循环包含在你的div,如果你想:

@browser.div(:class,'item-list').lis.each do |li| 
     puts li.text 
    end 
+1

感谢亚当芦苇,它的工作是我想要的。非常感谢 – NewTester 2012-03-06 14:35:35

2

根据Watir wiki,Watir supports:index方法li元素。所以除非它是watir-webdriver中的一个bug,我认为这个索引应该起作用。

您可能想尝试watir mailing list以查看这是否对他人有用。