我正在尝试点击页面上的链接,只能执行第一个链接。还有四个具有相似的代码,但它说它无法找到其他四个。
这是有效的代码行:
@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>
答案 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,这些属性是唯一的。