isomorfeus-puppetmaster 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d453a12b9cc8f801e1e81fdda6e615d7d256253eec19b60c7c969c8bf08bd72
4
- data.tar.gz: cbef053148c753b2b03c6b15e1bb815af51dfdc7821a10d422c803862ac57dcd
3
+ metadata.gz: e39fd34e187e7a7d720f8686a4bddadc81a697f59ab00a73b805cd8a2948f2ea
4
+ data.tar.gz: 6617fe83dccd1184592ccac1d6f8b562f0e89cfb96670278c8344c4e90c4dfee
5
5
  SHA512:
6
- metadata.gz: 42dd469ad600d330aa8904a31d638c8915bd6f49aba4990ff76c3bc92886d662f08d483128be27ffc6fdb4cf136a552b6f9a648c4609c1f4e50a0a61fa664ca8
7
- data.tar.gz: 5dc01c153258ca15823abaa9ad535869cebc5aced2b5e5af6c1346b64b73a4666b68969320e06a589ce9b0064e8b1889657da5742e3f39699d2505798a7865e3
6
+ metadata.gz: 41a57c902823019014f86898f02cb30fa2c2c153b8839ae54be97e27b79f2dd610cb5949ca61dd624f389ff0e3239aa196faa950465ade8f781b4fca25ca1bd4
7
+ data.tar.gz: 267dd5d1757a8813f85b800e3e765de64d588dd9d88019f2f8a553e501da102a25700a22f60c2cc0027b8a20fad0ceb8304ed2d78a271c8a640ccceff0ce913f
data/LICENSE CHANGED
@@ -19,3 +19,11 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
+
23
+ Files in ruby/lib/isomorfeus/puppetmaster/rspec and ruby/spec directory originally taken from https://github.com/teamcapybara/capybara
24
+
25
+ (The MIT License)
26
+
27
+ Copyright (c) 2009-2018 Thomas Walpole, Jonas Nicklas
28
+
29
+ (as above)
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # isomorfeus-puppetmaster
2
2
 
3
3
  A framework for acceptance tests or simply running tests in a headless browser.
4
- Comes with drivers for chromium headless and jsdom.
5
- Allows for writing javascript tests in pure ruby.
4
+ Comes with drivers for chrome headless.
5
+ Allows for writing javascript browser tests in pure ruby.
6
6
 
7
7
  ### Community and Support
8
8
  At the [Isomorfeus Framework Project](http://isomorfeus.com)
@@ -19,7 +19,7 @@ In Gemfile:
19
19
 
20
20
  Also requires the following npm modules with recommended versions:
21
21
 
22
- - [puppeteer 9.1.x](https://github.com/GoogleChrome/puppeteer#readme) - for the chromium driver
22
+ - [puppeteer 10.1.x](https://github.com/GoogleChrome/puppeteer#readme) - for the chrome driver
23
23
 
24
24
  Simply install them in your projects root. Puppetmaster also depends on isomorfeus-speednode, which will be installed automatically.
25
25
  Speednode will pickup the node modules then from the projects root node_modules directory.
@@ -27,12 +27,12 @@ Speednode will pickup the node modules then from the projects root node_modules
27
27
  ## Configuration
28
28
 
29
29
  Puppetmaster provides these drivers:
30
- - chromium - a real browser, headless, fast
31
- - chromium_debug - opens a chromium browser window with devtools enabled, useful for debugging tests
30
+ - chrome - a real browser, headless, fast
31
+ - chrome_debug - opens a chrome browser window with devtools enabled, useful for debugging tests
32
32
 
33
- Chromium is the default driver. Selecting another driver, for example firefox:
33
+ Chrome is the default driver. Selecting another driver, for example firefox:
34
34
  ```ruby
35
- Isomorfeus::Puppetmaster.driver = :chromium_debug
35
+ Isomorfeus::Puppetmaster.driver = :chrome_debug
36
36
  ```
37
37
 
38
38
  Puppetmaster provides support for these rack servers:
@@ -1,46 +1,46 @@
1
- require 'active_support/core_ext/string'
2
- require 'uri'
3
- require 'net/http'
4
- require 'rack'
5
- require 'opal'
6
- require 'opal-browser'
7
- require 'unparser'
8
- require 'method_source'
9
- require 'securerandom'
10
- require 'isomorfeus-speednode'
11
-
12
- # use execjs speednode for sure, unless something else has been specified
13
- unless ENV["EXECJS_RUNTIME"]
14
- ExecJS.runtime = ExecJS::Runtimes::Speednode
15
- end
16
-
17
- # require 'uglifier'
18
-
19
- require 'isomorfeus/puppetmaster'
20
- require 'isomorfeus/puppetmaster/self_forwardable'
21
- require 'isomorfeus/puppetmaster/errors'
22
- require 'isomorfeus/puppetmaster/cookie'
23
- require 'isomorfeus/puppetmaster/console_message'
24
- require 'isomorfeus/puppetmaster/request'
25
- require 'isomorfeus/puppetmaster/response'
26
- require 'isomorfeus/puppetmaster/node'
27
- require 'isomorfeus/puppetmaster/node/content_editable'
28
- require 'isomorfeus/puppetmaster/node/input'
29
- require 'isomorfeus/puppetmaster/node/checkbox'
30
- require 'isomorfeus/puppetmaster/node/filechooser'
31
- require 'isomorfeus/puppetmaster/node/radiobutton'
32
- require 'isomorfeus/puppetmaster/node/select'
33
- require 'isomorfeus/puppetmaster/node/textarea'
34
- require 'isomorfeus/puppetmaster/document'
35
- require 'isomorfeus/puppetmaster/iframe'
36
- require 'isomorfeus/puppetmaster/driver/puppeteer_document'
37
- require 'isomorfeus/puppetmaster/driver/puppeteer_node'
38
- require 'isomorfeus/puppetmaster/driver/puppeteer'
39
- require 'isomorfeus/puppetmaster/driver_registration'
40
- require 'isomorfeus/puppetmaster/server/executor_middleware'
41
- require 'isomorfeus/puppetmaster/server/middleware'
42
- require 'isomorfeus/puppetmaster/server/checker'
43
- require 'isomorfeus/puppetmaster/server'
44
- require 'isomorfeus/puppetmaster/server_registration'
45
-
46
- require 'isomorfeus/puppetmaster/dsl'
1
+ require 'active_support/core_ext/string'
2
+ require 'uri'
3
+ require 'net/http'
4
+ require 'rack'
5
+ require 'opal'
6
+ require 'opal-browser'
7
+ require 'unparser'
8
+ require 'method_source'
9
+ require 'securerandom'
10
+ require 'isomorfeus-speednode'
11
+
12
+ # use execjs speednode for sure, unless something else has been specified
13
+ unless ENV["EXECJS_RUNTIME"]
14
+ ExecJS.runtime = ExecJS::Runtimes::Speednode
15
+ end
16
+
17
+ # require 'uglifier'
18
+
19
+ require 'isomorfeus/puppetmaster'
20
+ require 'isomorfeus/puppetmaster/self_forwardable'
21
+ require 'isomorfeus/puppetmaster/errors'
22
+ require 'isomorfeus/puppetmaster/cookie'
23
+ require 'isomorfeus/puppetmaster/console_message'
24
+ require 'isomorfeus/puppetmaster/request'
25
+ require 'isomorfeus/puppetmaster/response'
26
+ require 'isomorfeus/puppetmaster/node'
27
+ require 'isomorfeus/puppetmaster/node/content_editable'
28
+ require 'isomorfeus/puppetmaster/node/input'
29
+ require 'isomorfeus/puppetmaster/node/checkbox'
30
+ require 'isomorfeus/puppetmaster/node/filechooser'
31
+ require 'isomorfeus/puppetmaster/node/radiobutton'
32
+ require 'isomorfeus/puppetmaster/node/select'
33
+ require 'isomorfeus/puppetmaster/node/textarea'
34
+ require 'isomorfeus/puppetmaster/document'
35
+ require 'isomorfeus/puppetmaster/iframe'
36
+ require 'isomorfeus/puppetmaster/driver/puppeteer_document'
37
+ require 'isomorfeus/puppetmaster/driver/puppeteer_node'
38
+ require 'isomorfeus/puppetmaster/driver/puppeteer'
39
+ require 'isomorfeus/puppetmaster/driver_registration'
40
+ require 'isomorfeus/puppetmaster/server/executor_middleware'
41
+ require 'isomorfeus/puppetmaster/server/middleware'
42
+ require 'isomorfeus/puppetmaster/server/checker'
43
+ require 'isomorfeus/puppetmaster/server'
44
+ require 'isomorfeus/puppetmaster/server_registration'
45
+
46
+ require 'isomorfeus/puppetmaster/dsl'
@@ -16,7 +16,7 @@ module Isomorfeus
16
16
  end
17
17
 
18
18
  def driver
19
- @driver ||= :chromium
19
+ @driver ||= :chrome
20
20
  end
21
21
 
22
22
  def driver=(drvr)
@@ -1,271 +1,271 @@
1
- module Isomorfeus
2
- module Puppetmaster
3
- class Document
4
- extend Isomorfeus::Puppetmaster::SelfForwardable
5
-
6
- document_forward %i[
7
- all_text
8
- accept_alert
9
- accept_confirm
10
- accept_leave_page
11
- accept_prompt
12
- body
13
- bring_to_front
14
- clear_authentication_credentials
15
- clear_cookies
16
- clear_extra_headers
17
- clear_url_blacklist
18
- close
19
- cookies
20
- console
21
- dismiss_confirm
22
- dismiss_leave_page
23
- dismiss_prompt
24
- dispatch_event
25
- double_click
26
- evaluate_script
27
- execute_script
28
- find
29
- find_all
30
- find_all_xpath
31
- find_xpath
32
- head
33
- html
34
- open_new_document
35
- remove_cookie
36
- reset_user_agent
37
- right_click
38
- scroll_by
39
- scroll_to
40
- set_authentication_credentials
41
- set_extra_headers
42
- set_url_blacklist
43
- set_user_agent
44
- title
45
- url
46
- user_agent
47
- viewport_maximize
48
- viewport_resize
49
- viewport_size
50
- wait_for
51
- wait_for_xpath
52
- ]
53
-
54
- document_forward_kwargs %i[
55
- click
56
- render_base64
57
- save_pdf
58
- save_screenshot
59
- set_cookie
60
- ]
61
-
62
- attr_reader :handle, :response
63
-
64
- def initialize(driver, handle, response)
65
- @driver = driver
66
- @handle = handle
67
- @response = response
68
- ObjectSpace.define_finalizer(self, @driver.class.document_handle_disposer(@driver, @handle))
69
- end
70
-
71
- def browser
72
- @driver.browser
73
- end
74
-
75
- def await_ruby(ruby_source = '', &block)
76
- ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
77
- ruby_source = "#{ruby_source}.then { |result| $promise_result = result; $promise_resolved = true }.fail { |result| $promise_result = result; $promise_resolved = true }"
78
- compiled_ruby = compile_ruby_source(ruby_source)
79
- if compiled_ruby.start_with?('/*')
80
- start_of_code = compiled_ruby.index('*/') + 3
81
- compiled_ruby = compiled_ruby[start_of_code..-1]
82
- end
83
- evaluate_script <<~JAVASCRIPT
84
- (function(){
85
- fun = function() {
86
- if (Opal) {
87
- Opal.gvars.promise_resolved = false;
88
- Opal.await_ruby_exception = null;
89
- try {
90
- return #{compiled_ruby}
91
- } catch (e) {
92
- Opal.await_ruby_exception = e;
93
- Opal.gvars.promise_resolved = true;
94
- }
95
- } else {
96
- setTimeout(fun, 100);
97
- }
98
- }
99
- fun();
100
- })()
101
- JAVASCRIPT
102
- have_result = false
103
- start = Time.now
104
- until have_result do
105
- raise "await_ruby: execution timed out! Is Opal available?" if (Time.now - start) > 30
106
- have_result = evaluate_script 'Opal ? Opal.gvars.promise_resolved : null'
107
- sleep 0.1 unless have_result
108
- end
109
- result, exception = execute_script <<~JAVASCRIPT
110
- var result;
111
- var exception = false;
112
- if (Opal.await_ruby_exception) {
113
- var e = Opal.await_ruby_exception;
114
- exception = { message: e.message, name: e.name, stack: e.stack }
115
- } else if (Opal.gvars.promise_result['$respond_to?']('is_a?') && Opal.gvars.promise_result['$is_a?'](Opal.Exception)) {
116
- let r = Opal.gvars.promise_result;
117
- exception = { message: r.$message(), name: r.$class().$name(), stack: r.$backtrace() }
118
- } else if (Opal.gvars.promise_result['$respond_to?']('to_n')) {
119
- result = Opal.gvars.promise_result.$to_n()
120
- } else { result = Opal.gvars.promise_result };
121
- delete Opal.gvars.promise_result;
122
- delete Opal.gvars.promise_resolved;
123
- return [result, exception];
124
- JAVASCRIPT
125
- if exception
126
- e = Isomorfeus::Puppetmaster::Error.new("#{exception['name']}: #{exception['message']}")
127
- e.set_backtrace(exception['stack'])
128
- raise e
129
- end
130
- result
131
- end
132
-
133
- def evaluate_ruby(ruby_source = '', &block)
134
- ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
135
- compiled_ruby = compile_ruby_source(ruby_source)
136
- if compiled_ruby.start_with?('/*')
137
- start_of_code = compiled_ruby.index('*/') + 3
138
- compiled_ruby = compiled_ruby[start_of_code..-1]
139
- end
140
- evaluate_script <<~JAVASCRIPT
141
- (function(){
142
- return #{compiled_ruby}
143
- })()
144
- JAVASCRIPT
145
- end
146
-
147
- def evaluate_with_opal(ruby_source = '', &block)
148
- ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
149
- compiled_ruby = compile_ruby_source(ruby_source)
150
- if compiled_ruby.start_with?('/*')
151
- start_of_code = compiled_ruby.index('*/') + 3
152
- compiled_ruby = compiled_ruby[start_of_code..-1]
153
- end
154
- evaluate_script <<~JAVASCRIPT
155
- (function(){
156
- if (typeof Opal === "undefined") {
157
- #{Isomorfeus::Puppetmaster.opal_prelude}
158
- }
159
- return #{compiled_ruby}
160
- })()
161
- JAVASCRIPT
162
- end
163
-
164
- def go_back
165
- @response = @driver.document_go_back(self)
166
- self
167
- end
168
-
169
- def go_forward
170
- @response = @driver.document_go_forward(self)
171
- self
172
- end
173
-
174
- def goto(uri)
175
- @response = @driver.document_goto(self, uri)
176
- self
177
- end
178
- alias_method :visit, :goto
179
-
180
- def has_content?(content, **options)
181
- body.has_content?(content, **options)
182
- end
183
-
184
- def has_css?(selector, **options)
185
- body.has_css?(selector, **options)
186
- end
187
-
188
- def has_current_path?(other_path)
189
- path == other_path
190
- end
191
-
192
- def has_text?(text, **options)
193
- body.has_text?(text, **options)
194
- end
195
-
196
- def has_xpath?(query, **options)
197
- body.has_xpath?(query, **options)
198
- end
199
-
200
- def isomorphic(ruby_source = '', &block)
201
- ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
202
- Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
203
- evaluate_ruby(ruby_source)
204
- end
205
-
206
- def isomorphic_with_opal(ruby_source = '', &block)
207
- ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
208
- Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
209
- evaluate_with_opal(ruby_source)
210
- end
211
-
212
- def method_missing(name, *args)
213
- method_name = name.to_s
214
- if method_name.start_with?('find_by_')
215
- what = method_name[8..-1]
216
- return find("[#{what}=\"#{args.first}\"]") if %w[name type value].include?(what)
217
- return find_xpath("//*[text()=\"#{args.first}\"]") if what == 'content'
218
- elsif method_name.start_with?('has_')
219
- # :has_checked_field?, #
220
- # :has_content?,
221
- # :has_css?,
222
- # :has_field?,
223
- # :has_link?,
224
- # :has_select?,
225
- # :has_selector?,
226
- # :has_table?,
227
- # :has_text?,
228
- # :has_unchecked_field?,
229
- # :has_xpath?,
230
- # :has_button?, # method_missing
231
- end
232
- super(name, *args)
233
- end
234
-
235
- def open_document_by(&block)
236
- open_documents = @driver.document_handles
237
- block.call
238
- new_documents = @driver.document_handles - open_documents
239
- raise 'Multiple documents opened' if new_documents.size > 1
240
- raise 'No window opened' if new_documents.size < 1
241
- Isomorfeus::Puppetmaster::Document.new(@driver, new_documents.first, Isomorfeus::Puppetmaster::Response.new)
242
- end
243
-
244
- def path
245
- URI.parse(url).path
246
- end
247
-
248
- def reload
249
- @response = @driver.reload(self)
250
- end
251
-
252
- def respond_to?(name, include_private = false)
253
- return true if %i[find_by_content find_by_name find_by_type find_by_value].include?(name)
254
- super(name, include_private)
255
- end
256
-
257
- # assertions
258
- # :assert_current_path,
259
- # :assert_no_current_path
260
- # assert_title
261
- # assert_no_title
262
-
263
- protected
264
-
265
- def compile_ruby_source(source_code)
266
- # TODO maybe use compile server, which can cache code
267
- Opal.compile(source_code, parse_comments: false)
268
- end
269
- end
270
- end
271
- end
1
+ module Isomorfeus
2
+ module Puppetmaster
3
+ class Document
4
+ extend Isomorfeus::Puppetmaster::SelfForwardable
5
+
6
+ document_forward %i[
7
+ all_text
8
+ accept_alert
9
+ accept_confirm
10
+ accept_leave_page
11
+ accept_prompt
12
+ body
13
+ bring_to_front
14
+ clear_authentication_credentials
15
+ clear_cookies
16
+ clear_extra_headers
17
+ clear_url_blacklist
18
+ close
19
+ cookies
20
+ console
21
+ dismiss_confirm
22
+ dismiss_leave_page
23
+ dismiss_prompt
24
+ dispatch_event
25
+ double_click
26
+ evaluate_script
27
+ execute_script
28
+ find
29
+ find_all
30
+ find_all_xpath
31
+ find_xpath
32
+ head
33
+ html
34
+ open_new_document
35
+ remove_cookie
36
+ reset_user_agent
37
+ right_click
38
+ scroll_by
39
+ scroll_to
40
+ set_authentication_credentials
41
+ set_extra_headers
42
+ set_url_blacklist
43
+ set_user_agent
44
+ title
45
+ url
46
+ user_agent
47
+ viewport_maximize
48
+ viewport_resize
49
+ viewport_size
50
+ wait_for
51
+ wait_for_xpath
52
+ ]
53
+
54
+ document_forward_kwargs %i[
55
+ click
56
+ render_base64
57
+ save_pdf
58
+ save_screenshot
59
+ set_cookie
60
+ ]
61
+
62
+ attr_reader :handle, :response
63
+
64
+ def initialize(driver, handle, response)
65
+ @driver = driver
66
+ @handle = handle
67
+ @response = response
68
+ ObjectSpace.define_finalizer(self, @driver.class.document_handle_disposer(@driver, @handle))
69
+ end
70
+
71
+ def browser
72
+ @driver.browser
73
+ end
74
+
75
+ def await_ruby(ruby_source = '', &block)
76
+ ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
77
+ ruby_source = "#{ruby_source}.then { |result| $promise_result = result; $promise_resolved = true }.fail { |result| $promise_result = result; $promise_resolved = true }"
78
+ compiled_ruby = compile_ruby_source(ruby_source)
79
+ if compiled_ruby.start_with?('/*')
80
+ start_of_code = compiled_ruby.index('*/') + 3
81
+ compiled_ruby = compiled_ruby[start_of_code..-1]
82
+ end
83
+ evaluate_script <<~JAVASCRIPT
84
+ (function(){
85
+ fun = function() {
86
+ if (Opal) {
87
+ Opal.gvars.promise_resolved = false;
88
+ Opal.await_ruby_exception = null;
89
+ try {
90
+ return #{compiled_ruby}
91
+ } catch (e) {
92
+ Opal.await_ruby_exception = e;
93
+ Opal.gvars.promise_resolved = true;
94
+ }
95
+ } else {
96
+ setTimeout(fun, 100);
97
+ }
98
+ }
99
+ fun();
100
+ })()
101
+ JAVASCRIPT
102
+ have_result = false
103
+ start = Time.now
104
+ until have_result do
105
+ raise "await_ruby: execution timed out! Is Opal available?" if (Time.now - start) > 30
106
+ have_result = evaluate_script 'Opal ? Opal.gvars.promise_resolved : null'
107
+ sleep 0.1 unless have_result
108
+ end
109
+ result, exception = execute_script <<~JAVASCRIPT
110
+ var result;
111
+ var exception = false;
112
+ if (Opal.await_ruby_exception) {
113
+ var e = Opal.await_ruby_exception;
114
+ exception = { message: e.message, name: e.name, stack: e.stack }
115
+ } else if (Opal.gvars.promise_result['$respond_to?']('is_a?') && Opal.gvars.promise_result['$is_a?'](Opal.Exception)) {
116
+ let r = Opal.gvars.promise_result;
117
+ exception = { message: r.$message(), name: r.$class().$name(), stack: r.$backtrace() }
118
+ } else if (Opal.gvars.promise_result['$respond_to?']('to_n')) {
119
+ result = Opal.gvars.promise_result.$to_n()
120
+ } else { result = Opal.gvars.promise_result };
121
+ delete Opal.gvars.promise_result;
122
+ delete Opal.gvars.promise_resolved;
123
+ return [result, exception];
124
+ JAVASCRIPT
125
+ if exception
126
+ e = Isomorfeus::Puppetmaster::Error.new("#{exception['name']}: #{exception['message']}")
127
+ e.set_backtrace(exception['stack'])
128
+ raise e
129
+ end
130
+ result
131
+ end
132
+
133
+ def evaluate_ruby(ruby_source = '', &block)
134
+ ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
135
+ compiled_ruby = compile_ruby_source(ruby_source)
136
+ if compiled_ruby.start_with?('/*')
137
+ start_of_code = compiled_ruby.index('*/') + 3
138
+ compiled_ruby = compiled_ruby[start_of_code..-1]
139
+ end
140
+ evaluate_script <<~JAVASCRIPT
141
+ (function(){
142
+ return #{compiled_ruby}
143
+ })()
144
+ JAVASCRIPT
145
+ end
146
+
147
+ def evaluate_with_opal(ruby_source = '', &block)
148
+ ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
149
+ compiled_ruby = compile_ruby_source(ruby_source)
150
+ if compiled_ruby.start_with?('/*')
151
+ start_of_code = compiled_ruby.index('*/') + 3
152
+ compiled_ruby = compiled_ruby[start_of_code..-1]
153
+ end
154
+ evaluate_script <<~JAVASCRIPT
155
+ (function(){
156
+ if (typeof Opal === "undefined") {
157
+ #{Isomorfeus::Puppetmaster.opal_prelude}
158
+ }
159
+ return #{compiled_ruby}
160
+ })()
161
+ JAVASCRIPT
162
+ end
163
+
164
+ def go_back
165
+ @response = @driver.document_go_back(self)
166
+ self
167
+ end
168
+
169
+ def go_forward
170
+ @response = @driver.document_go_forward(self)
171
+ self
172
+ end
173
+
174
+ def goto(uri)
175
+ @response = @driver.document_goto(self, uri)
176
+ self
177
+ end
178
+ alias_method :visit, :goto
179
+
180
+ def has_content?(content, **options)
181
+ body.has_content?(content, **options)
182
+ end
183
+
184
+ def has_css?(selector, **options)
185
+ body.has_css?(selector, **options)
186
+ end
187
+
188
+ def has_current_path?(other_path)
189
+ path == other_path
190
+ end
191
+
192
+ def has_text?(text, **options)
193
+ body.has_text?(text, **options)
194
+ end
195
+
196
+ def has_xpath?(query, **options)
197
+ body.has_xpath?(query, **options)
198
+ end
199
+
200
+ def isomorphic(ruby_source = '', &block)
201
+ ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
202
+ Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
203
+ evaluate_ruby(ruby_source)
204
+ end
205
+
206
+ def isomorphic_with_opal(ruby_source = '', &block)
207
+ ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
208
+ Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
209
+ evaluate_with_opal(ruby_source)
210
+ end
211
+
212
+ def method_missing(name, *args)
213
+ method_name = name.to_s
214
+ if method_name.start_with?('find_by_')
215
+ what = method_name[8..-1]
216
+ return find("[#{what}=\"#{args.first}\"]") if %w[name type value].include?(what)
217
+ return find_xpath("//*[text()=\"#{args.first}\"]") if what == 'content'
218
+ elsif method_name.start_with?('has_')
219
+ # :has_checked_field?, #
220
+ # :has_content?,
221
+ # :has_css?,
222
+ # :has_field?,
223
+ # :has_link?,
224
+ # :has_select?,
225
+ # :has_selector?,
226
+ # :has_table?,
227
+ # :has_text?,
228
+ # :has_unchecked_field?,
229
+ # :has_xpath?,
230
+ # :has_button?, # method_missing
231
+ end
232
+ super(name, *args)
233
+ end
234
+
235
+ def open_document_by(&block)
236
+ open_documents = @driver.document_handles
237
+ block.call
238
+ new_documents = @driver.document_handles - open_documents
239
+ raise 'Multiple documents opened' if new_documents.size > 1
240
+ raise 'No window opened' if new_documents.size < 1
241
+ Isomorfeus::Puppetmaster::Document.new(@driver, new_documents.first, Isomorfeus::Puppetmaster::Response.new)
242
+ end
243
+
244
+ def path
245
+ URI.parse(url).path
246
+ end
247
+
248
+ def reload
249
+ @response = @driver.reload(self)
250
+ end
251
+
252
+ def respond_to?(name, include_private = false)
253
+ return true if %i[find_by_content find_by_name find_by_type find_by_value].include?(name)
254
+ super(name, include_private)
255
+ end
256
+
257
+ # assertions
258
+ # :assert_current_path,
259
+ # :assert_no_current_path
260
+ # assert_title
261
+ # assert_no_title
262
+
263
+ protected
264
+
265
+ def compile_ruby_source(source_code)
266
+ # TODO maybe use compile server, which can cache code
267
+ Opal.compile(source_code, parse_comments: false)
268
+ end
269
+ end
270
+ end
271
+ end
@@ -39,7 +39,7 @@ module Isomorfeus
39
39
  # init ExecJS context
40
40
  @app = options.delete(:app)
41
41
  @options = options.dup
42
- @browser_type = @options.delete(:browser_type) { :chromium }
42
+ @browser_type = @options.delete(:browser_type) { :chrome }
43
43
  @options[:product] = "'#{@browser_type}'" unless @options.key?(:product)
44
44
  @max_width = @options.delete(:max_width) { VIEWPORT_MAX_WIDTH }
45
45
  @max_height = @options.delete(:max_height) { VIEWPORT_MAX_HEIGHT }
@@ -1,9 +1,7 @@
1
- require 'tty-which'
2
-
3
- Isomorfeus::Puppetmaster.register_driver(:chromium) do |app|
4
- Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: true, app: app)
5
- end
6
-
7
- Isomorfeus::Puppetmaster.register_driver(:chromium_debug) do |app|
8
- Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: false, devtools: true, app: app)
9
- end
1
+ Isomorfeus::Puppetmaster.register_driver(:chrome) do |app|
2
+ Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chrome, headless: true, app: app)
3
+ end
4
+
5
+ Isomorfeus::Puppetmaster.register_driver(:chrome_debug) do |app|
6
+ Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chrome, headless: false, app: app)
7
+ end
@@ -1,44 +1,44 @@
1
- module Isomorfeus
2
- module Puppetmaster
3
- module DSL
4
- def default_document
5
- @puppetmaster_default_document ||= get_default_document
6
- end
7
-
8
- def goto(uri)
9
- puppetmaster_session.document_goto(default_document, uri)
10
- @puppetmaster_default_document
11
- end
12
- alias_method :visit, :goto
13
-
14
- def on_server(ruby_source = '', &block)
15
- Isomorfeus::Puppetmaster.served_app.on_server(ruby_source, &block)
16
- end
17
-
18
- def open_new_session(app = nil, driver = nil)
19
- Isomorfeus::Puppetmaster.drivers[driver ? driver : Isomorfeus::Puppetmaster.driver].call(app ? app : Isomorfeus::Puppetmaster.served_app)
20
- end
21
-
22
- def open_new_document(uri = nil)
23
- puppetmaster_session.document_open_new_document(nil, uri)
24
- end
25
-
26
- def reset_session!
27
- @@puppetmaster_session = nil
28
- end
29
-
30
- private
31
-
32
- def get_default_document
33
- doc = puppetmaster_session.default_document
34
- return doc if doc
35
- puppetmaster_session.document_open_new_document('about:blank')
36
- end
37
-
38
- def puppetmaster_session
39
- @@puppetmaster_session ||= open_new_session(Isomorfeus::Puppetmaster.served_app)
40
- end
41
-
42
- end
43
- end
44
- end
1
+ module Isomorfeus
2
+ module Puppetmaster
3
+ module DSL
4
+ def default_document
5
+ @puppetmaster_default_document ||= get_default_document
6
+ end
7
+
8
+ def goto(uri)
9
+ puppetmaster_session.document_goto(default_document, uri)
10
+ @puppetmaster_default_document
11
+ end
12
+ alias_method :visit, :goto
13
+
14
+ def on_server(ruby_source = '', &block)
15
+ Isomorfeus::Puppetmaster.served_app.on_server(ruby_source, &block)
16
+ end
17
+
18
+ def open_new_session(app = nil, driver = nil)
19
+ Isomorfeus::Puppetmaster.drivers[driver ? driver : Isomorfeus::Puppetmaster.driver].call(app ? app : Isomorfeus::Puppetmaster.served_app)
20
+ end
21
+
22
+ def open_new_document(uri = nil)
23
+ puppetmaster_session.document_open_new_document(nil, uri)
24
+ end
25
+
26
+ def reset_session!
27
+ @@puppetmaster_session = nil
28
+ end
29
+
30
+ private
31
+
32
+ def get_default_document
33
+ doc = puppetmaster_session.default_document
34
+ return doc if doc
35
+ puppetmaster_session.document_open_new_document('about:blank')
36
+ end
37
+
38
+ def puppetmaster_session
39
+ @@puppetmaster_session ||= open_new_session(Isomorfeus::Puppetmaster.served_app)
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -62,4 +62,4 @@ Isomorfeus::Puppetmaster.register_server :puma do |app, port, host, **options|
62
62
  end.run.join
63
63
  end
64
64
 
65
- Isomorfeus::Puppetmaster.server = :puma
65
+ Isomorfeus::Puppetmaster.server = :iodine
@@ -1,3 +1,3 @@
1
1
  module Isomorfeus
2
- PUPPETMASTER_VERSION = '0.4.0'
2
+ PUPPETMASTER_VERSION = '0.4.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-puppetmaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-14 00:00:00.000000000 Z
11
+ date: 2021-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: iodine
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.7.44
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.7.44
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: irb
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -212,14 +226,14 @@ dependencies:
212
226
  requirements:
213
227
  - - "~>"
214
228
  - !ruby/object:Gem::Version
215
- version: 1.11.0
229
+ version: 1.12.2
216
230
  type: :development
217
231
  prerelease: false
218
232
  version_requirements: !ruby/object:Gem::Requirement
219
233
  requirements:
220
234
  - - "~>"
221
235
  - !ruby/object:Gem::Version
222
- version: 1.11.0
236
+ version: 1.12.2
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: os
225
239
  requirement: !ruby/object:Gem::Requirement
@@ -291,19 +305,33 @@ dependencies:
291
305
  - !ruby/object:Gem::Version
292
306
  version: '3.6'
293
307
  - !ruby/object:Gem::Dependency
294
- name: sinatra
308
+ name: roda
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: 3.46.0
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: 3.46.0
321
+ - !ruby/object:Gem::Dependency
322
+ name: tilt
295
323
  requirement: !ruby/object:Gem::Requirement
296
324
  requirements:
297
325
  - - "~>"
298
326
  - !ruby/object:Gem::Version
299
- version: 2.1.0
327
+ version: 2.0.10
300
328
  type: :development
301
329
  prerelease: false
302
330
  version_requirements: !ruby/object:Gem::Requirement
303
331
  requirements:
304
332
  - - "~>"
305
333
  - !ruby/object:Gem::Version
306
- version: 2.1.0
334
+ version: 2.0.10
307
335
  description: Acceptance testing for isomorfeus.
308
336
  email: jan@kursator.de
309
337
  executables: []