我想使用show_frames watir命令,但它不起作用。不适用于watir,不适用于watir-webdriver。
这是样本。
irb
require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "somewebsite.com"
browser.show_frames
NoMethodError:未定义的方法'show frames'for#
有什么建议吗?
编辑: 这是带输出的新代码。
irb(main):001:0> irb
irb#1(main):001:0> require "watir-webdriver"
=> true
irb#1(main):002:0> browser = Watir::Browser.new :ff
=> #<Watir::Browser:0x..faae978e6 url="about:blank" title="">
irb#1(main):003:0> browser.goto "iwon.com"
=> "http://www.iwon.com/home/home.jhtml"
irb#1(main):004:0> browser.frames
=> #<Watir::FrameCollection:0x3ab7bd8 @parent=#<Watir::Browser:0x..faae978e6 url
="http://www.iwon.com/home/home.jhtml" title="IWON: The Best Free Online Games,
Casino & Sweeps. Win Money & Prizes!">, @selector={:tag_name=>/^(iframe|frame)$/
}>
iwon.com中有3个iframe。其他2来自广告。我想要监控广告,所以我需要抓取那些内容。
答案 0 :(得分:1)
那是因为没有#show_frames
方法。这可能是错的,但据我所知,它存在于Watir 1中,但在Watir 2中删除了。
如果您想获取所有帧的列表,只需执行browser.frames
答案 1 :(得分:1)
正如@pOdeje在回答中所说,你需要使用.frames
这只会返回第一级,它不会覆盖嵌套框架(因为框架内的内容就像它自己的网页一样)
要看到那些你必须努力工作的人。
browser.frame.frames #lists frames inside the first frame
请注意,因为如果您没有指定如何查找元素,它将默认为第一个实例,这与说
相同browser.frame(:index => 0).frames
另外值得注意的是,帧实际上会返回一组帧,因此您可以使用几乎任何适用于集合的ruby函数。 (注意:在Ruby和其他动态语言中,“Collection”是通用列表和哈希的总称。请参阅任何优秀的ruby教程like this one,了解有关如何使用集合的更多信息)
也许最有用的是.each
browser.frames.each do |frame|
puts "top level frame info :" + frame
frame.frames.each do |innerframe|
puts "second tier frame data is: " + innerframe
end
end
可能有效也可能无效,具体取决于frame元素是否具有为其定义的默认.to_s。如果不是,你可能需要调整上面的代码,以使其输出合理的东西。