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