如何从链接集合中获取某些特定链接

时间:2013-08-14 12:33:37

标签: watir watir-webdriver pageobjects page-object-gem

我正在使用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.comhttp://www.somesite2.com 不幸的是,我无法用css表示:last /:first etc。

可以通过将css更改为:

来获取第二个链接
#home-followees li.animate-in ul li[data-show-id] p.schedule-text a + a

但是如何从这些块中获得第一个链接呢? 当然,我可以同时获得两个链接并与每个第二个一起工作,但也许有另一种解决方案?

2 个答案:

答案 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? }