red-glass 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/Selenium/driver.rb +16 -0
- data/lib/Selenium/element.rb +23 -0
- data/lib/Selenium/navigation.rb +17 -0
- data/lib/Selenium/search_context.rb +29 -0
- data/lib/red-glass/red_glass.rb +53 -8
- data/lib/red-glass/views/index.erb +0 -1
- metadata +22 -53
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'observer'
|
2
|
+
|
3
|
+
module Selenium
|
4
|
+
module WebDriver
|
5
|
+
class Driver
|
6
|
+
include SearchContext
|
7
|
+
include Observable
|
8
|
+
|
9
|
+
def found_element(element)
|
10
|
+
changed
|
11
|
+
notify_observers element
|
12
|
+
end
|
13
|
+
|
14
|
+
end # Driver
|
15
|
+
end # WebDriver
|
16
|
+
end # Selenium
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'observer'
|
2
|
+
|
3
|
+
module Selenium
|
4
|
+
module WebDriver
|
5
|
+
class Element
|
6
|
+
include SearchContext
|
7
|
+
include Observable
|
8
|
+
|
9
|
+
def click
|
10
|
+
result = bridge.clickElement @id
|
11
|
+
changed
|
12
|
+
notify_observers
|
13
|
+
result
|
14
|
+
end
|
15
|
+
|
16
|
+
def found_element(element)
|
17
|
+
changed
|
18
|
+
notify_observers element
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
module SearchContext
|
4
|
+
|
5
|
+
def find_element(*args)
|
6
|
+
how, what = extract_args(args)
|
7
|
+
|
8
|
+
unless by = FINDERS[how.to_sym]
|
9
|
+
raise ArgumentError, "cannot find element by #{how.inspect}"
|
10
|
+
end
|
11
|
+
|
12
|
+
result = bridge.find_element_by by, what.to_s, ref
|
13
|
+
self.found_element result
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_elements(*args)
|
18
|
+
how, what = extract_args(args)
|
19
|
+
|
20
|
+
unless by = FINDERS[how.to_sym]
|
21
|
+
raise ArgumentError, "cannot find elements by #{how.inspect}"
|
22
|
+
end
|
23
|
+
|
24
|
+
bridge.find_elements_by by, what.to_s, ref
|
25
|
+
end
|
26
|
+
|
27
|
+
end # SearchContext
|
28
|
+
end # WebDriver
|
29
|
+
end # Selenium
|
data/lib/red-glass/red_glass.rb
CHANGED
@@ -1,31 +1,64 @@
|
|
1
1
|
require "selenium-webdriver"
|
2
2
|
require "uuid"
|
3
3
|
require "net/http"
|
4
|
+
require_relative "../Selenium/driver"
|
5
|
+
require_relative "../Selenium/element"
|
6
|
+
require_relative "../Selenium/navigation"
|
7
|
+
require_relative "../Selenium/search_context"
|
4
8
|
|
5
9
|
class RedGlass
|
6
|
-
attr_accessor :driver, :test_id, :opts, :port, :pid
|
10
|
+
attr_accessor :driver, :test_id, :opts, :port, :pid, :recording
|
7
11
|
|
8
12
|
PROJ_ROOT = File.dirname(__FILE__).to_s
|
9
13
|
|
10
14
|
def initialize(driver, opts={})
|
11
15
|
@driver = driver
|
16
|
+
@driver.navigate.add_observer self
|
17
|
+
@driver.add_observer self, :found_element_event
|
12
18
|
@opts = opts
|
19
|
+
@recording = false
|
20
|
+
end
|
21
|
+
|
22
|
+
def update(url=nil)
|
23
|
+
if @recording
|
24
|
+
reload
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def click_event(url=nil)
|
29
|
+
if @recording
|
30
|
+
reload if !has_red_glass_js?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def found_element_event(element)
|
35
|
+
if @recording
|
36
|
+
element.add_observer self, :click_event
|
37
|
+
end
|
13
38
|
end
|
14
39
|
|
15
40
|
def start
|
16
41
|
set_config
|
17
|
-
|
18
|
-
@pid = Process.spawn("ruby","#{PROJ_ROOT}/red-glass-app.rb")
|
19
|
-
raise "Red Glass server could not bet started." if !is_server_ready?
|
20
|
-
Process.detach @pid
|
21
|
-
end
|
42
|
+
start_server
|
22
43
|
uuid = UUID.new
|
23
44
|
@test_id = uuid.generate
|
24
45
|
load_js
|
46
|
+
@recording = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def reload
|
50
|
+
set_config
|
51
|
+
start_server
|
52
|
+
load_js
|
53
|
+
end
|
54
|
+
|
55
|
+
def pause
|
56
|
+
@recording = false
|
25
57
|
end
|
26
58
|
|
27
59
|
def stop
|
28
60
|
Process.kill('INT', @pid)
|
61
|
+
@recording = false
|
29
62
|
end
|
30
63
|
|
31
64
|
private
|
@@ -47,6 +80,14 @@ class RedGlass
|
|
47
80
|
is_server_ready
|
48
81
|
end
|
49
82
|
|
83
|
+
def start_server
|
84
|
+
if !is_server_ready? 1
|
85
|
+
@pid = Process.spawn("ruby","#{PROJ_ROOT}/red-glass-app.rb")
|
86
|
+
raise "Red Glass server could not bet started." if !is_server_ready?
|
87
|
+
Process.detach @pid
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
50
91
|
def set_config
|
51
92
|
@port = @opts[:red_glass_port].nil? ? '4567' : @opts[:red_glass_port].to_s
|
52
93
|
ENV['red_glass_port'] = @port
|
@@ -77,11 +118,15 @@ class RedGlass
|
|
77
118
|
@driver.execute_script raw_js
|
78
119
|
end
|
79
120
|
|
121
|
+
def has_red_glass_js?
|
122
|
+
@driver.execute_script "var hasRedGlass = typeof jQuery().redGlass == 'function' ? true : false; return hasRedGlass"
|
123
|
+
end
|
124
|
+
|
80
125
|
def load_red_glass_js
|
81
126
|
raw_js = File.open(File.expand_path("#{PROJ_ROOT}/public/scripts/jquery.red-glass-0.1.0.js"), 'rb').read
|
82
|
-
@driver.execute_script raw_js
|
127
|
+
@driver.execute_script raw_js if !has_red_glass_js?
|
83
128
|
@driver.execute_script("jQuery(document).redGlass('#{@test_id}', '#{@port}')")
|
84
|
-
|
129
|
+
#@driver.execute_script "jQuery.noConflict(true)"
|
85
130
|
end
|
86
131
|
|
87
132
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: red-glass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70208572273860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
24
|
+
version_requirements: *70208572273860
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: em-websocket
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70208572273240 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *70208572273240
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: thin
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70208572272580 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70208572272580
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: selenium-webdriver
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70208572271860 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :runtime
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *70208572271860
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: json
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70208572271180 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *70208572271180
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: uuid
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70208572270400 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *70208572270400
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: rack-test
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70208572285860 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ! '>='
|
@@ -117,12 +87,7 @@ dependencies:
|
|
117
87
|
version: '0'
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
90
|
+
version_requirements: *70208572285860
|
126
91
|
description: Red Glass works alongside Selenium to observe browser events, and provides
|
127
92
|
an interactive log which illustrates changes to the DOM during an automation session.
|
128
93
|
email: frankj.ohara@gmail.com
|
@@ -202,7 +167,11 @@ files:
|
|
202
167
|
- lib/red-glass/red_glass.rb
|
203
168
|
- lib/red-glass/views/index.erb
|
204
169
|
- lib/red-glass.rb
|
205
|
-
|
170
|
+
- lib/Selenium/driver.rb
|
171
|
+
- lib/Selenium/element.rb
|
172
|
+
- lib/Selenium/navigation.rb
|
173
|
+
- lib/Selenium/search_context.rb
|
174
|
+
homepage: https://github.com/fohara/red-glass
|
206
175
|
licenses: []
|
207
176
|
post_install_message:
|
208
177
|
rdoc_options: []
|
@@ -222,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
191
|
version: '0'
|
223
192
|
requirements: []
|
224
193
|
rubyforge_project:
|
225
|
-
rubygems_version: 1.8.
|
194
|
+
rubygems_version: 1.8.10
|
226
195
|
signing_key:
|
227
196
|
specification_version: 3
|
228
197
|
summary: ! 'Red Glass: Selenium event pane'
|