如何使用Ruby

时间:2017-04-19 17:28:42

标签: ruby cucumber watir

我正在尝试点击页面上的链接,只能执行第一个链接。还有四个具有相似的代码,但它说它无法找到其他四个。

这是有效的代码行:

@browser.div(class:'ms-vb itx').link(:text =>'Rapid Alignment').click 

这是四个不起作用之一:

@browser.div(class:'ms-vb itx').link(:text =>'Design Develop Integrate and Test').click

HTML:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div>

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…; onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div>

3 个答案:

答案 0 :(得分:1)

我认为问题是使用#div会返回一个div

试试这个

divs = @browser.divs(class:'ms-vb itx')

然后

divs.each do |d|
  d.link.click
end

#divs会返回包含DivCollection的{​​{1}},因此所有Enumerable方法都可以正常运行,例如Enumerable等。

select

答案 1 :(得分:0)

这会失败,因为div是相同的,所以它每次尝试找到相同的div并开始搜索给定的链接,所以当你试图找到不同的链接时它会第二次失败。

实际上你不需要div来找到那个链接,你只需编写这个代码就可以了

b.link(:text=>'Rapid Alignment',:visible=>true).click

b.link(:text=>'Design Develop Integrate and Test',:visible=>true).click

该链接文本本身就是该链接的标识,所以你不需要任何除法,直接写b.link(),它已经足够了。

答案 2 :(得分:0)

您必须指定要定位的<div>。有两个或更多<div>个代码具有相同的class属性。

鉴于此HTML代码段:

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="1" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Rapid Alignment</a></div> 

<div class="ms-vb itx" onmouseover="OnItem(this)" CTXName="ctx586" id="3" Field="LinkTitle" Perm="0xb008031061" EventType=""><a onfocus="OnLink(this)" href="asdm.nwie.net/_layouts/15/…" onclick="EditLink2(this,586);return false;" target="_self">Design Develop Integrate and Test</a></div>

您需要通过在定位器中提供索引来定位相应的<div>

p b.div(:class => 'ms-vb itx').link(:text => 'Rapid Alignment').exists?
#=> true
p b.div(:class => 'ms-vb itx').link(:text => 'Design Develop Integrate and Test').exists?
#=> false
p b.div(:class => 'ms-vb itx', :index => 1).link(:text => 'Design Develop Integrate and Test').exists?
#=> true

但是,如果UI元素发生变化,按索引定位元素可能很脆弱。您应该考虑使用id属性进行定位,根据spec,这些属性是唯一的。