Watir - Как мне собрать все ссылки, где span содержит aria_label «Мультимедиа»

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

      @browser.links.collect(&:href).each do |link|
  matches = regex.match(link)
  array_of_multimedia << matches[:multimedia_id] if matches
end

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

Прилагается скриншот структуры HTML.HTML-структура

Я попробовал несколько подходов, таких как поиск всех диапазонов, а затем переход снизу вверх к родителю диапазона, но это не дало мне href.

      @browser.spans(aria_label: "Multimedia").each do |span|
 span.parent.parent.a.hreflang #Didn't work
 span.parent.parent.a.link.href #Didn't work
 span.parent.parent.href.text #Didn't work
 element.tag_name #This shows "a" which is correct though
end

Я также попробовал подход сверху вниз, выполнив

      @browser.links.collect(&:href).each do |link|
  link_element = @browser.link(href: link)
  link_element.children.following_sibling(aria_label: "Multimedia").present? #Didn't work
end

До сих пор не удалось получить фактические hrefs. Будем признательны за любую помощь!

1 ответ

Поскольку диапазон находится внутри тега ссылки, будет проще идти снизу вверх.

Делайте как можно больше с локаторами Watir, а не с несколькими петлями. Родительский метод принимает аргументы:

      @browser.spans(aria_label: 'Multimedia').map {|span| span.parent(tag_name: 'a').href }

Что касается того, что вы пробовали:

      # parent.parent is the link, so calling `#a` is looking for a link nested inside the link
span.parent.parent.a.hreflang
span.parent.parent.a.link.href 

# href should give you a String, you shouldn't need to call #text method on it
span.parent.parent.href.text 

# element isn't defined here, but try just element.href 
element.tag_name

Также обратите внимание, что Element#hrefметод по сути является оболочкой для Element#attribute_value('href').

Другие вопросы по тегам