lib/red-glass/red_glass.rb in red-glass-0.0.3 vs lib/red-glass/red_glass.rb in red-glass-0.0.4
- old
+ new
@@ -1,33 +1,66 @@
require "selenium-webdriver"
require "uuid"
require "net/http"
+require_relative "../Selenium/driver"
+require_relative "../Selenium/element"
+require_relative "../Selenium/navigation"
+require_relative "../Selenium/search_context"
class RedGlass
- attr_accessor :driver, :test_id, :opts, :port, :pid
+ attr_accessor :driver, :test_id, :opts, :port, :pid, :recording
PROJ_ROOT = File.dirname(__FILE__).to_s
def initialize(driver, opts={})
@driver = driver
+ @driver.navigate.add_observer self
+ @driver.add_observer self, :found_element_event
@opts = opts
+ @recording = false
end
+ def update(url=nil)
+ if @recording
+ reload
+ end
+ end
+
+ def click_event(url=nil)
+ if @recording
+ reload if !has_red_glass_js?
+ end
+ end
+
+ def found_element_event(element)
+ if @recording
+ element.add_observer self, :click_event
+ end
+ end
+
def start
set_config
- if !is_server_ready? 1
- @pid = Process.spawn("ruby","#{PROJ_ROOT}/red-glass-app.rb")
- raise "Red Glass server could not bet started." if !is_server_ready?
- Process.detach @pid
- end
+ start_server
uuid = UUID.new
@test_id = uuid.generate
load_js
+ @recording = true
end
+ def reload
+ set_config
+ start_server
+ load_js
+ end
+
+ def pause
+ @recording = false
+ end
+
def stop
Process.kill('INT', @pid)
+ @recording = false
end
private
def is_server_ready?(time_limit=30)
@@ -45,10 +78,18 @@
break if is_server_ready || counter >= time_limit
end
is_server_ready
end
+ def start_server
+ if !is_server_ready? 1
+ @pid = Process.spawn("ruby","#{PROJ_ROOT}/red-glass-app.rb")
+ raise "Red Glass server could not bet started." if !is_server_ready?
+ Process.detach @pid
+ end
+ end
+
def set_config
@port = @opts[:red_glass_port].nil? ? '4567' : @opts[:red_glass_port].to_s
ENV['red_glass_port'] = @port
end
@@ -75,13 +116,17 @@
def load_get_path
raw_js = File.open(File.expand_path("#{PROJ_ROOT}/public/scripts/jquery.getpath.js"), 'rb').read
@driver.execute_script raw_js
end
+ def has_red_glass_js?
+ @driver.execute_script "var hasRedGlass = typeof jQuery().redGlass == 'function' ? true : false; return hasRedGlass"
+ end
+
def load_red_glass_js
raw_js = File.open(File.expand_path("#{PROJ_ROOT}/public/scripts/jquery.red-glass-0.1.0.js"), 'rb').read
- @driver.execute_script raw_js
+ @driver.execute_script raw_js if !has_red_glass_js?
@driver.execute_script("jQuery(document).redGlass('#{@test_id}', '#{@port}')")
- @driver.execute_script "jQuery.noConflict(true)"
+ #@driver.execute_script "jQuery.noConflict(true)"
end
end
\ No newline at end of file