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')
.