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

问题描述

|| 我正在尝试搜索/选择带下划线的页面中的链接,而其他链接则没有。来源是这样的:
<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>
我尝试了类似的东西
link = browser.link(:u?,true)
link.exists?
我收到以下错误
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开发和测试同时进行时。从抓取的角度来看,服务器是用户看到的文本格式,搜索带下划线的粗体链接等对于抓取是有意义的。     

解决方法

        我以前从未见过在测试用例中使用过这种属性。我也没有看到任何代码支持。您可能需要自己动手。这是从Zeljko借来的示例
def hasUnderlined(browser)
  s = false
  browser.links.each do |l| 
    if l.html.downcase.match /\\<u\\>*\\<\\/u\\>/
      s = true
    end
  end
end

def getUnderlined(browser)
  browser.links.each do |l| 
    if l.html.downcase.match /\\<u\\>*\\<\\/u\\>/
      return l
    end
  end
end
    ,        我认为您想要的不是直接可能的,因为下划线不是链接标签的属性,而是格式化标签,它只能链接到链接中的文本。 但是,在现代网页中,格式设置通常是由CSS和属性(例如类名)的组合控制的,这些类名可以在标识链接时指定。因此,恕我直言,您最好的选择是与开发人员讨论他们如何编码该站点,并查看他们是否愿意通过使用稍微现代的技术来控制带下划线的链接来提高其代码的可测试性,例如如使用CSS并在类名下加下划线。 (还有很多其他很好的理由来使用CSS来控制格式,而不是直接将其嵌入HTML中,但是,除非可以这么说,除非你们刚接触html-banana-boat,否则就不必教他们为什么使用CSS是一件好事) 这样一来,您就可以根据用于使CSS在文本下划线的class属性搜索链接 如果您的开发人员不愿意采用这样的方法来使其代码更可测试,那么我认为您唯一的选择就是为此创建自己的红宝石代码并修改水的副本(请参阅@Dave的答案) ,然后随时准备在更新watir等时维护该自定义补丁。     ,        因此,您唯一了解的链接是带下划线的? 我以为可以做到这一点(使用最新的watir-webdriver gem):
browser.link.u.click
但是我得到了这个:
NoMethodError: undefined method `u\' for #<Watir::Anchor:0x00000100cbb3c0>
Jari(watir-webdriver开发人员)说,他认为
u
标记不在HTML规范中。 顺便说一句,这有效:
browser.link.b.click
Jari建议尝试使用xpath,但我认为CSS选择器更易于阅读。这里是:
browser.element(:css => \"a b u\").click