Watir - 如何收集跨度包含 aria_label "Multimedia" 的所有链接

Watir - How do I collect all links where the span contains aria_label "Multimedia"

我写了一个 ruby 代码,浏览器 object 找到所有链接,然后如果它们匹配特定的正则表达式,我将它们一个一个地存储在一个数组中。

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

我正在尝试创建一个过滤器,我只迭代那些链接,其中第二个 child div 内的跨度包含 aria-label 作为 Multimedia.

附上HTML结构的截图。HTML structure

我尝试了一些方法,比如找到所有跨度,然后从下到上找到跨度的 parent 的 parent,但它没有给我 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

到目前为止,无法获得实际的 href。将不胜感激!

因为跨度在link标签内,自下而上会更容易

尽可能多地使用 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') 的包装器。