我必须处理包含<g>
标签的网页中的某些图形项目。我可以通过放入selenium webdriver来做这样的事情来找到它们:
browser.wd.find_elements( :tag_name => "g" )
watir webdriver的等价物是什么?
另外,我如何将这些selenium元素转换为watir元素?
我可以以某种方式在本地添加对<g>
标记的支持吗?
答案 0 :(得分:6)
解决方案1 - Watir-Webdriver等效:
与你在selenium-webdriver中所做的相同的是:
browser.elements( :tag_name => "g" )
所以你可以做这样的事情来输出每个元素的文字:
browser.elements( :tag_name => "g" ).each do |x|
puts g.text
end
解决方案2 - 添加对G元素的支持:
在要求使用watir-webdriver后,添加以下代码:
module Watir
module Container
def g(*args)
G.new(self, extract_selector(args).merge(:tag_name => "g"))
end
def gs(*args)
GCollection.new(self, extract_selector(args).merge(:tag_name => "g"))
end
end
class G < Element
end
class GCollection < ElementCollection
def element_class
G
end
end
end
然后你可以像对待任何其他元素一样对待'g'。例如:
puts browser.g(:index, 0).text
browser.gs.each{ |x| puts x.text }
G和GCollection类将支持所有标准元素方法。如果存在特定于该元素的内容,则可以向该类添加其他方法。
更新 - 添加自定义方法的示例:
要获取光标样式,您可以像这样在G类中添加一个方法:
class G < Element
def cursor_style()
assert_exists
return @element.style("cursor")
end
end
这将允许您获取这样的游标属性:
puts browser.g(:index, 0).cursor_style
#=> move
与元素交互的任何自定义方法都需要以assert_exists开头。然后,在该方法中,您可以使用@element变量处理该元素。
请注意,因为G元素继承自Element类,所以您也可以使用内置样式方法:
puts browser.g(:index, 0).style("cursor")
#=> move
答案 1 :(得分:1)
watir或watir-webdriver中不支持非标准HTML标记。部分原因是我们必须支持的可能标签名称列表是无穷无尽的。
如果您愿意,可以在自己的自定义标签中进行monkeypatch。从长远来看,如果您不得不经常处理这些自定义标签,那么就像Watir api支持的其他标准HTML元素一样,这可能是您最好的解决方案。
您可以在标记名称上使用CSS选择器,但这只有在您坚持使用元素对象时才有效,如Watir::Exception::MissingWayOfFindingObjectException: invalid attribute: :css中所述。如果你问我,哪种方式会让事情变得不那么可读和/或有用,但在这方面可能是一个快速而简单的解决方案,值得花费很少。
或者您可以使用.driver
或.wd
方法在您需要watir不支持的内容时访问webdriver功能。 (但这也不太可读)