0

我正在使用 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 等。

第二个链接可以通过将 css 更改为:

#home-followees li.animate-in ul li[data-show-id] p.schedule-text a + a

但是我怎样才能从这些块中获得第一个链接呢?当然,我可以获得两个链接并使用每 2 个链接,但也许有替代解决方案?

4

2 回答 2

2

您可以使用 cssnth-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")
于 2013-08-14T13:00:07.917 回答
2

我不建议使用像这样的 css 选择器,因为它们会使您的测试更难阅读且更脆弱。

但是,无论选择器最终是什么,我都会使用 Ruby 的 Enumerable 方法来获取第二个链接,如下所示:

links.select.each_with_index {|_, i| i.odd? }
于 2013-08-14T16:16:44.277 回答