我进行了一些搜索,但无法找到合适的答案。基本上我有一个长度不同的无序列表。我想遍历列表,做一些其他事情,然后返回并选择列表中的下一个项目。当我定义循环应该迭代的次数时,我可以很好地做到这一点,因为我知道列表中的项目数量。
但是我不想为每个测试定义这个,我想获取列表中的项目数,然后将其弹出到一个变量中,我可以使用该变量退出循环并执行我想要的下一步操作。
HTML 是这样的:
<ul id="PageContent_cat">
<li class="sel">
<a target="_self" href="/searchlocation.aspx?c=S1">S1</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S2">S2</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S3">S3</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S4">S4</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S5">S5</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S6">S6</a>
</li>
<li>
<a target="_self" href="/searchlocation.aspx?c=S7">S7</a>
</li>
</ul>
所以我可以看到列表中有 7 项。显然在 watir 我可以使用以下内容:
arr= ie.select_list(:name,'lr').getAllContents.to_a
但对于网络驱动程序则不然。
我想我也许可以使用“lis”,但我只得到一个十六进制结果:
$bob = browser.ul(:id => "PageContent_cat").lis
投入 $bob
Thanks,
Paul
根据您想要收集的信息以及您打算将其用于什么目的,以下是通常完成的方式。您可以让它在到达最后一个元素时自然停止,而不是获取一个数字来定义迭代,然后迭代该次数:
MyList = browser.ul(:id => "PageContent_cat")
#Scrape links from the UL for visiting
MyList.links.each do |link|
puts link
puts link.text
b.goto(link)
#etc
end
#Save li items to an array for later processing
MyArray = []
MyList.lis.each do |li|
puts li.text
MyArray << li.text
#etc
end
#Iterate through your array in the same method, to report/visit/etc
MyArray.each do |item|
puts "I collected something: #{item}"
b.goto(item)
end #
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)