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