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')
的包装器。
我写了一个 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')
的包装器。