3

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

<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 开发和测试齐头并进时才有意义。从抓取的角度来看,文本格式是用户看到的,搜索带下划线、粗体链接等对抓取有意义。

4

3 回答 3

1

我以前从未见过在测试用例中使用过这种属性。我也没有看到任何代码支持它。你可能不得不自己动手。这是从 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
于 2011-06-12T15:07:15.770 回答
1

我不认为你想要的直接是可能的,因为下划线不是链接标签的属性,而是一个格式化标签,它只适用于链接中的文本。

但是,在现代网页中,格式通常由 CSS 和类名等属性的组合控制,这些是您在识别链接时可以指定的内容。因此,恕我直言,您在这里最好的选择可能是与您的开发人员讨论他们如何对网站进行编码,看看他们是否愿意通过使用稍微更现代的技术来控制带下划线的链接来增加其代码的可测试性,例如就像使用 CSS 和基于类名的下划线一样。(还有很多其他充分的理由使用 CSS 来控制格式而不是将其直接嵌入到 HTML 中,但除非你的人是刚从 html-banana-boat 中脱颖而出,否则不需要教他们为什么使用 CSS是好事)

这将允许您根据用于导致 CSS 为文本加下划线的类属性搜索链接

如果您的开发人员不接受这种使他们的代码更具可测试性的方法,那么我认为您唯一的选择是为此创建自己的 ruby​​ 代码并修改您的水副本(请参阅@Dave 的答案),然后准备好在您更新 watir 等时维护该自定义补丁。

于 2011-06-13T06:38:30.690 回答
0

那么,您对链接的唯一了解就是它带有下划线?

我认为这会做到(使用最新的 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
于 2011-06-24T15:38:57.200 回答