我正在使用watir-webdriver,下面显示了几行相同的代码:
...
<p class="schedule-text">
by
<a href="http://www.somesite.com">MarketingClub</a>
in
<a href="http://www.somesite2.com">Marketing</a>
</p>
我需要获得p标签中包含的第一个链接以及p标记中包含的第二个链接 所以使用页面对象我添加了以下代码:
links(:followees_category, :css => "#home-followees li.animate-in ul li[data-show-id] p.schedule-text a")
...
followees_category_elements.attribute("href")
最后一行会给我两个链接:http://www.somesite2.com,http://www.somesite2.com 不幸的是,我无法用css表示:last /:first etc。
可以通过将css更改为:
来获取第二个链接#home-followees li.animate-in ul li[data-show-id] p.schedule-text a + a
但是如何从这些块中获得第一个链接呢? 当然,我可以同时获得两个链接并与每个第二个一起工作,但也许有另一种解决方案?
答案 0 :(得分:2)
您可以使用css nth-of-type
伪类根据索引(或相对位置)获取元素。
例如,a:nth-of-type(1)
可用于返回作为其父级第一行的所有链接:
links(:followees_category, :css => "p.schedule-text a:nth-of-type(1)")
对于第二个链接,您可以执行a:nth-of-type(2)
。请注意,它是基于1的索引。
links(:followees_category, :css => "p.schedule-text a:nth-of-type(2)")
对于第一个链接,您还可以执行a:first-of-type
:
links(:followees_category, :css => "p.schedule-text a:first-of-type")
如果第二个链接始终是最后一个链接,您也可以执行a:last-of-type
:
links(:followees_category, :css => "p.schedule-text a:last-of-type")
答案 1 :(得分:2)
我不建议使用像这样的css选择器,因为它们会使你的测试更难阅读,更脆弱。
但是,无论选择器到底是什么,我都会使用Ruby的Enumerable方法来获取第二个链接:
links.select.each_with_index {|_, i| i.odd? }