Поиск подчеркнутая ссылка в Watir - PullRequest
3 голосов
/ 12 июня 2011

Я пытаюсь найти / выбрать ссылку на подчеркнутой странице, а другие нет. Источник примерно такой:

<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?'

Edit: Так что я на самом деле использую это для очистки экрана, а не для тестирования. Это может объяснить причины, по которым watir не поддерживает это напрямую, поскольку CSS и другие передовые практики имеют смысл для тестирования, а также когда разработка и тестирование HTML идут рука об руку. Но с точки зрения очистки текстовое форматирование - это то, что видит пользователь, а поиск подчеркнутых, полужирных ссылок и т. Д. Имеет смысл для очистки.

Ответы [ 3 ]

1 голос
/ 13 июня 2011

Я не думаю, что то, что вы хотите, возможно напрямую, потому что подчеркивание - это не атрибут тега ссылки, а тег форматирования, который соответствует только тексту в ссылке.

Однако в современномНа веб-страницах форматирование часто контролируется сочетанием CSS и таких атрибутов, как имена классов, которые вы можете указать при идентификации ссылки.Поэтому, имхо, вам лучше всего немного поговорить с вашими разработчиками о том, как они кодируют сайт, и посмотреть, открыты ли они для повышения тестируемости своего кода, используя немного более современные методы для контроля того, какие ссылки подчеркнуты, например,как, скажем, с использованием CSS и подчеркиванием имени класса.(Есть много других веских причин использовать CSS для управления форматированием вместо того, чтобы встраивать его непосредственно в HTML, но если ваши ребята совсем не знакомы с html-banana-boat, так сказать, их не нужно учить, почему с помощью CSSэто хорошо)

Это позволило бы вам искать ссылку в соответствии с атрибутом класса, который использовался для того, чтобы CSS подчеркивал текст

Если ваши разработчики не открыты для такогоподход, чтобы сделать их код более тестируемым, тогда я думаю, что единственной возможностью для вас будет создать собственный код ruby ​​для этого и изменить свою копию воды (см. ответ @ Dave), а затем быть готовым поддерживать этот пользовательский патч в любое времявы обновляете watir и т. д.

1 голос
/ 12 июня 2011

Я никогда не видел такого рода атрибутов, используемых в тестовом примере.Я также не видел никакой поддержки кода для этого.Возможно, вам придется свернуть свой собственный.Вот пример заимствовано у Желько

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
0 голосов
/ 24 июня 2011

Итак, единственное, что вы знаете о ссылке, это то, что она подчеркнута?

Я думал, что это будет сделано (с использованием последней версии watir-webdriver gem):

browser.link.u.click

Но я получил это:

NoMethodError: undefined method `u' for #<Watir::Anchor:0x00000100cbb3c0>

Яри (разработчик watir-webdriver) сказал, что он думает, что тег u не указан в спецификации HTML.

Кстати, это работает:

browser.link.b.click

Яри предложил попробовать xpath, но я подумал, что селекторы CSS лучше почитать.Вот оно:

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