Watir - Show_Frames не работает - PullRequest
1 голос
/ 01 марта 2012

Я хочу использовать команду 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' для #

Какой совет?

редактирование: вот новый код с выводом.

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 фрейма. Другие 2 из рекламы. Я хочу отслеживать рекламу, поэтому мне нужно очистить содержимое этих 2.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Как сказал @pOdeje в своем ответе, вам нужно использовать .frames

Это только вернет первый уровень, он не будет охватывать вложенные фреймы (потому что контент внутри фрейма действует как его собственная веб-страница)

Чтобы увидеть тех, кому нужно идти вниз.

browser.frame.frames  #lists frames inside the first frame

Обратите внимание, что поскольку по умолчанию будет использоваться первый экземпляр, если вы не укажете, как найти элемент, это то же самое, что сказать

browser.frame(:index => 0).frames

Также следует отметить, что фреймы на самом деле возвращают коллекцию фреймов, поэтому вы можете использовать практически любую функцию ruby, которая работает с коллекцией. (примечание: в Ruby и других динамических языках «коллекция» является общим термином для списков и хэшей общего пользования. Смотрите любое хорошее учебное руководство по Ruby , например, , для получения дополнительной информации о работе с коллекциями)

пожалуй, самым полезным из них является .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 по умолчанию. в противном случае вам, возможно, придется настроить вышеприведенный код, чтобы заставить его выводить что-то разумное.

1 голос
/ 01 марта 2012

Это потому, что нет #show_frames метода. Это может быть неправильно, но, насколько я понимаю, оно существовало в Watir 1, но было удалено в Watir 2.

Если вы хотите получить список всех фреймов, просто наберите browser.frames

...