lib/red-glass/red_glass.rb in red-glass-0.1.3 vs lib/red-glass/red_glass.rb in red-glass-0.1.4

- old
+ new

@@ -1,8 +1,10 @@ -require "selenium-webdriver" -require "uuid" -require "net/http" +require 'selenium-webdriver' +require 'uuid' +require 'net/http' +require 'open-uri' +require 'openssl' class RedGlass attr_accessor :driver, :test_id, :opts, :port, :pid, :recording, :event_sequence, :page_metadata, :archive_dir PROJ_ROOT = File.dirname(__FILE__).to_s @@ -10,10 +12,11 @@ def initialize(driver, opts={}) @driver = driver @opts = opts opts[:listener].red_glass = self if opts[:listener] @test_id = opts[:test_id] || UUID.new.generate + @server_log = opts[:server_log] || false @event_sequence = [] @page_metadata = {} @recording = false end @@ -33,11 +36,11 @@ def pause @recording = false end def stop - Process.kill('INT', @pid) + Process.kill('INT', @pid) if @pid @recording = false end def take_snapshot capture_page_metadata @@ -49,31 +52,40 @@ write_metadata end private - def is_server_ready?(time_limit=30) - is_server_ready = false - uri = URI.parse("http://localhost:#{@port}/status") - counter = 0 - loop do - sleep(1) - counter = counter + 1 + def server_ready?(time_limit=60) + ready, elapsed = false, 0 + until ready || elapsed >= time_limit begin - is_server_ready = Net::HTTP.get_response(uri).code.to_s == '200' ? true : false + http = Net::HTTP.new(server_uri.host, server_uri.port) + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + response = http.get(server_uri.request_uri) + ready = response.code.to_s == '200' ? true : false rescue - is_server_ready = false + ready = false end - break if is_server_ready || counter >= time_limit + elapsed = increment_elapsed(elapsed) unless ready end - is_server_ready + ready end + def increment_elapsed(elapsed) + sleep 1 + elapsed + 1 + end + + def server_uri + URI.parse("https://localhost:#{@port}/status") + end + def start_server - if !is_server_ready? 1 - @pid = Process.spawn("ruby","#{PROJ_ROOT}/red-glass-app/red-glass-app.rb") - raise "Red Glass server could not bet started." if !is_server_ready? + unless server_ready? 1 + @pid = Process.spawn("ruby #{PROJ_ROOT}/red-glass-app/red-glass-app.rb") + raise 'Red Glass server could not bet started.' unless server_ready? Process.detach @pid end end def set_config @@ -84,17 +96,24 @@ def load_js load_red_glass_carryall unless has_red_glass_js? end def load_red_glass_carryall - raw_js = File.open(File.expand_path("#{PROJ_ROOT}/red-glass-js/redglass.carryall.js"), 'rb').read + carryall_path = "#{PROJ_ROOT}/red-glass-js/redglass.carryall.js" + encoded_lines = IO.readlines(File.expand_path(carryall_path)).map do |line| + line.encode('ASCII-8BIT', :invalid => :replace, :undef => :replace) + end + File.open(carryall_path, "w") do |file| + file.puts(encoded_lines) + end + raw_js = File.open(File.expand_path(carryall_path), 'rb').read @driver.execute_script raw_js - @driver.execute_script("jQuery(document).redGlass('#{@test_id}', '#{@port}')") + @driver.execute_script("jQuery(document).redGlass({testId: '#{@test_id}', port: '#{@port}', useServerLog: #{@server_log}})") end def has_red_glass_js? - @driver.execute_script "var hasRedGlass = (typeof jQuery == 'function' && typeof jQuery().redGlass == 'function') ? true : false; return hasRedGlass" + @driver.execute_script "return typeof jQuery == 'function' && typeof jQuery().redGlass == 'function';" end def create_page_archive_directory detect_archive_location unless @archive_dir @@ -144,18 +163,18 @@ dom_json_string = "{\n\t\"browser\":" + "\"" + @page_metadata[:browser][:name] + "\"," dom_json_string += "\n\t\"elements\":\n\t[\n\t" serialize_dom_js_string = stringify_serialize_dom_js dom_json_string += @driver.execute_script(serialize_dom_js_string + " return RecurseDomJSON(rgUtils.query('*'),'')") dom_json_string = dom_json_string[0, (dom_json_string.length - 3)] + "\n\t]\n}" - @page_metadata[:doc_width] = @driver.execute_script(serialize_dom_js_string + " return rgUtils.query(document).width()") - @page_metadata[:doc_height] = @driver.execute_script(serialize_dom_js_string + " return rgUtils.query(document).height()") + @page_metadata[:doc_width] = @driver.execute_script(serialize_dom_js_string + ' return rgUtils.query(document).width()') + @page_metadata[:doc_height] = @driver.execute_script(serialize_dom_js_string + ' return rgUtils.query(document).height()') write_serialized_dom dom_json_string end def stringify_serialize_dom_js - domgun_recurse_dom_file = File.open("#{PROJ_ROOT}/red-glass-js/serialize-dom.js", 'rb') - domgun_recurse_dom_string = domgun_recurse_dom_file.read - domgun_recurse_dom_file.close - domgun_recurse_dom_string + recurse_dom_file = File.open("#{PROJ_ROOT}/red-glass-js/serialize-dom.js", 'rb') + recurse_dom_string = recurse_dom_file.read + recurse_dom_file.close + recurse_dom_string end end \ No newline at end of file