watir-webdriver を使用してすべてのコンテンツを含むページを保存するにはどうすればよいですか?
browser.html
ブラウザの要素のみを保存します。ダンプしたファイルを開くbrowser.html
と、スタイリングはありません。
またbrowser.html
、iframe を保存しません。iframe をループして個別に保存することはできますが、メイン ページから分離されます。
css と画像を含むページ全体をダンプする簡単な方法がないため、後でスクリーンショットを保存するかもしれません。
require 'fileutils'
class Recorder
attr_reader :request, :counter, :browser
# request should contain w(login_id start_time)
def initialize(request)
@request, @counter = request, 1
# Settings class contains my configs (enable recording, paths, etc.)
FileUtils.mkpath(path) if Settings.recorder.record and !File.exists?(path)
end
def record(hash)
return unless Settings.recorder.record
@browser = hash["browser"]
record_html(hash)
record_frames(hash)
@counter += 1
end
private
# hash should contain (method_name browser)
def record_html(hash)
File.open("#{path}#{generate_file_name(hash)}", "w") do |file|
file.write("<!--#{browser.url}-->\n")
file.write(browser.html)
end
end
def record_frames(hash)
browser.frames.each_with_index do |frame, index|
File.open("#{path}#{generate_file_name(hash, index + 1)}", "w") do |file|
file.write("<!--#{browser.url}-->\n")
file.write(frame.html)
end
end
end
def path
"#{Settings.recorder.path}/#{request["login_id"]}/#{request["start_time"]}/"
end
def generate_file_name(hash, frame=nil)
return "#{counter}-#{hash["method_name"]}.html" if frame.nil?
"#{counter}-frame#{frame}-#{hash["method_name"]}.html"
end
end