Html 在watir中搜索带下划线的链接

Html 在watir中搜索带下划线的链接,html,ruby,screen-scraping,watir,watir-webdriver,Html,Ruby,Screen Scraping,Watir,Watir Webdriver,我正在尝试搜索/选择带有下划线的页面中的链接,而其他页面则没有。来源如下: <a href="someurl1"> <b> <u>Some ulined text</u> </b> <u></u> </a> <br> <a href="someurl2">Other link text</a> <br> <a href="someurl3">

我正在尝试搜索/选择带有下划线的页面中的链接,而其他页面则没有。来源如下:

<a href="someurl1">
<b>
<u>Some ulined text</u>
</b>
<u></u>
</a>
<br>
<a href="someurl2">Other link text</a>
<br>
<a href="someurl3">Another Link text</a>
<br>
我得到以下错误

TypeError: expected one of [String, Regexp], got true:TrueClass
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:152:in `check_type'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:189:in `normalized_selector'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:188:in `each'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:188:in `normalized_selector'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:76:in `find_first_by_multiple'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/locators/element_locator.rb:33:in `locate'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/elements/element.rb:260:in `locate'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/elements/element.rb:247:in `assert_exists'
    from /usr/lib/ruby/gems/1.8/gems/watir-webdriver-0.2.4/lib/watir-webdriver/elements/element.rb:31:in `exist?'
编辑:
所以我实际上是用它来刮屏而不是测试。这也许可以解释为什么watir不直接支持这一点,因为CSS和其他更好的实践对于测试以及HTML开发和测试齐头并进是有意义的。Hoserver从抓取的角度来看,文本格式是用户看到的,搜索带下划线、粗体链接等对抓取有意义。

我以前从未见过在测试用例中使用这种属性。我也没有看到任何代码支持它。你可能得自己滚。这里有一个例子

def(浏览器)
s=假
browser.links.each do|l|
如果l.html.downcase.match/\*\/
s=真
结束
结束
结束
def GET(浏览器)
browser.links.each do|l|
如果l.html.downcase.match/\*\/
返回l
结束
结束
结束

我认为您不可能直接想要什么,因为下划线不是链接标记的属性,而是仅适用于链接中文本的格式标记

然而,在现代web页面中,格式通常由CSS和属性(如类名)的组合控制,在标识链接时可以指定这些属性。因此,IMHO您最好在这里与您的开发人员讨论一下他们是如何编写站点的,看看他们是否愿意通过使用稍微现代一些的技术来控制哪些链接加下划线来提高代码的可测试性,比如说使用CSS和基于类名加下划线。(使用CSS来控制格式,而不是直接将其嵌入HTML,还有很多其他很好的理由,但除非你的人刚刚从HTML香蕉船上下来,否则不需要教他们为什么使用CSS是件好事)

这将允许您根据class属性搜索链接,class属性用于使CSS在文本下面加下划线


如果您的开发人员不愿意采用这种方法来提高代码的可测试性,那么我认为您唯一的选择就是为此创建您自己的ruby代码,并修改您的water副本(请参见@Dave的答案),然后随时准备在更新watir等时维护该自定义补丁,关于链接,您只知道它有下划线

我认为这可以做到(使用最新的watir webdriver gem):

但我明白了:

NoMethodError: undefined method `u' for #<Watir::Anchor:0x00000100cbb3c0>
Jari建议尝试xpath,但我认为css选择器更适合阅读。这是:

browser.element(:css => "a b u").click

我如何使用这个方法?我看它什么也没回?我是否使用browser.link(:hasparnered,true)或link=hasparnered(browser)对不起,我误读了您的代码。似乎您需要执行“link=getbarrented(browser)”是的,带下划线的链接似乎过时了,更奇怪的是,只有一些链接有下划线。
browser.link.u.click
NoMethodError: undefined method `u' for #<Watir::Anchor:0x00000100cbb3c0>
browser.link.b.click
browser.element(:css => "a b u").click