cuprite 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/README.md +15 -7
- data/lib/capybara/cuprite.rb +1 -1
- data/lib/capybara/cuprite/browser.rb +3 -22
- data/lib/capybara/cuprite/browser/client.rb +3 -0
- data/lib/capybara/cuprite/browser/dom.rb +2 -2
- data/lib/capybara/cuprite/browser/frame.rb +5 -1
- data/lib/capybara/cuprite/browser/input.json +1341 -0
- data/lib/capybara/cuprite/browser/input.rb +79 -10
- data/lib/capybara/cuprite/browser/javascripts/index.js +14 -1
- data/lib/capybara/cuprite/browser/page.rb +59 -1
- data/lib/capybara/cuprite/browser/process.rb +36 -23
- data/lib/capybara/cuprite/browser/runtime.rb +20 -48
- data/lib/capybara/cuprite/browser/targets.rb +17 -4
- data/lib/capybara/cuprite/browser/web_socket.rb +20 -11
- data/lib/capybara/cuprite/driver.rb +5 -27
- data/lib/capybara/cuprite/errors.rb +0 -6
- data/lib/capybara/cuprite/version.rb +1 -1
- metadata +28 -27
@@ -40,10 +40,7 @@ module Capybara::Cuprite
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def switch_to_window(target_id)
|
43
|
-
page =
|
44
|
-
page ||= Page.new(target_id, @browser)
|
45
|
-
@targets[target_id] ||= page
|
46
|
-
@page = page
|
43
|
+
@page = find_or_create_page(target_id)
|
47
44
|
end
|
48
45
|
|
49
46
|
def open_new_window
|
@@ -59,6 +56,15 @@ module Capybara::Cuprite
|
|
59
56
|
|
60
57
|
def within_window(locator)
|
61
58
|
original = window_handle
|
59
|
+
|
60
|
+
if Capybara::VERSION.to_f < 3.0
|
61
|
+
target_id = window_handles.find do |target_id|
|
62
|
+
page = find_or_create_page(target_id)
|
63
|
+
locator == page.frame_name
|
64
|
+
end
|
65
|
+
locator = target_id if target_id
|
66
|
+
end
|
67
|
+
|
62
68
|
if window_handles.include?(locator)
|
63
69
|
switch_to_window(locator)
|
64
70
|
yield
|
@@ -87,6 +93,13 @@ module Capybara::Cuprite
|
|
87
93
|
|
88
94
|
private
|
89
95
|
|
96
|
+
def find_or_create_page(target_id)
|
97
|
+
page = @targets[target_id]
|
98
|
+
page ||= Page.new(target_id, @browser)
|
99
|
+
@targets[target_id] ||= page
|
100
|
+
page
|
101
|
+
end
|
102
|
+
|
90
103
|
def remove_page(target_id)
|
91
104
|
page = @targets.delete(target_id)
|
92
105
|
@page = nil if page && @page == page
|
@@ -2,16 +2,11 @@
|
|
2
2
|
|
3
3
|
require "json"
|
4
4
|
require "socket"
|
5
|
-
require "forwardable"
|
6
5
|
require "websocket/driver"
|
7
6
|
|
8
7
|
module Capybara::Cuprite
|
9
8
|
class Browser
|
10
9
|
class WebSocket
|
11
|
-
extend Forwardable
|
12
|
-
|
13
|
-
delegate close: :@driver
|
14
|
-
|
15
10
|
attr_reader :url, :messages
|
16
11
|
|
17
12
|
def initialize(url, logger)
|
@@ -22,7 +17,9 @@ module Capybara::Cuprite
|
|
22
17
|
@driver = ::WebSocket::Driver.client(self)
|
23
18
|
@messages = Queue.new
|
24
19
|
|
20
|
+
@driver.on(:open, &method(:on_open))
|
25
21
|
@driver.on(:message, &method(:on_message))
|
22
|
+
@driver.on(:close, &method(:on_close))
|
26
23
|
|
27
24
|
@thread = Thread.new do
|
28
25
|
begin
|
@@ -39,22 +36,34 @@ module Capybara::Cuprite
|
|
39
36
|
@driver.start
|
40
37
|
end
|
41
38
|
|
42
|
-
def
|
43
|
-
|
44
|
-
json = data.to_json
|
45
|
-
@driver.text(json)
|
46
|
-
@logger&.puts("\n\n[#{Time.now.to_f - @started_at}] >>> #{json}")
|
39
|
+
def on_open(_event)
|
40
|
+
sleep 0.01 # https://github.com/faye/websocket-driver-ruby/issues/46
|
47
41
|
end
|
48
42
|
|
49
43
|
def on_message(event)
|
50
44
|
data = JSON.parse(event.data)
|
51
45
|
@messages.push(data)
|
52
|
-
@logger&.puts("
|
46
|
+
@logger&.puts(" <<< #{event.data}\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def on_close(_event)
|
50
|
+
@messages.close
|
51
|
+
@thread.kill
|
52
|
+
end
|
53
|
+
|
54
|
+
def send_message(data)
|
55
|
+
json = data.to_json
|
56
|
+
@driver.text(json)
|
57
|
+
@logger&.puts("\n\n>>> #{json}")
|
53
58
|
end
|
54
59
|
|
55
60
|
def write(data)
|
56
61
|
@sock.write(data)
|
57
62
|
end
|
63
|
+
|
64
|
+
def close
|
65
|
+
@driver.close
|
66
|
+
end
|
58
67
|
end
|
59
68
|
end
|
60
69
|
end
|
@@ -95,10 +95,6 @@ module Capybara::Cuprite
|
|
95
95
|
nil
|
96
96
|
end
|
97
97
|
|
98
|
-
def within_frame(name, &block)
|
99
|
-
browser.within_frame(name, &block)
|
100
|
-
end
|
101
|
-
|
102
98
|
def switch_to_frame(locator)
|
103
99
|
browser.switch_to_frame(locator)
|
104
100
|
end
|
@@ -301,15 +297,15 @@ module Capybara::Cuprite
|
|
301
297
|
|
302
298
|
def accept_modal(type, options = {})
|
303
299
|
case type
|
304
|
-
when :confirm
|
300
|
+
when :alert, :confirm
|
305
301
|
browser.accept_confirm
|
306
302
|
when :prompt
|
307
|
-
browser.accept_prompt
|
303
|
+
browser.accept_prompt(options[:with])
|
308
304
|
end
|
309
305
|
|
310
306
|
yield if block_given?
|
311
307
|
|
312
|
-
find_modal(options)
|
308
|
+
browser.find_modal(options)
|
313
309
|
end
|
314
310
|
|
315
311
|
def dismiss_modal(type, options = {})
|
@@ -321,7 +317,8 @@ module Capybara::Cuprite
|
|
321
317
|
end
|
322
318
|
|
323
319
|
yield if block_given?
|
324
|
-
|
320
|
+
|
321
|
+
browser.find_modal(options)
|
325
322
|
end
|
326
323
|
|
327
324
|
private
|
@@ -342,25 +339,6 @@ module Capybara::Cuprite
|
|
342
339
|
@options[:screen_size] || [1366, 768]
|
343
340
|
end
|
344
341
|
|
345
|
-
def find_modal(options)
|
346
|
-
start_time = Time.now
|
347
|
-
timeout_sec = options.fetch(:wait) { session_wait_time }
|
348
|
-
expect_text = options[:text]
|
349
|
-
expect_regexp = expect_text.is_a?(Regexp) ? expect_text : Regexp.escape(expect_text.to_s)
|
350
|
-
not_found_msg = "Unable to find modal dialog"
|
351
|
-
not_found_msg += " with #{expect_text}" if expect_text
|
352
|
-
|
353
|
-
begin
|
354
|
-
modal_text = browser.modal_message
|
355
|
-
raise Capybara::ModalNotFound if modal_text.nil? || (expect_text && !modal_text.match(expect_regexp))
|
356
|
-
rescue Capybara::ModalNotFound => e
|
357
|
-
raise e, not_found_msg if (Time.now - start_time) >= timeout_sec
|
358
|
-
sleep(0.05)
|
359
|
-
retry
|
360
|
-
end
|
361
|
-
modal_text
|
362
|
-
end
|
363
|
-
|
364
342
|
def session_wait_time
|
365
343
|
if respond_to?(:session_options)
|
366
344
|
session_options.default_max_wait_time
|
@@ -101,12 +101,6 @@ module Capybara
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
class KeyError < ::ArgumentError
|
105
|
-
def initialize(response)
|
106
|
-
super(response["args"].first)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
104
|
class TimeoutError < Error
|
111
105
|
def message
|
112
106
|
"Timed out waiting for response. It's possible that this happened " \
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuprite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Vorotilin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -34,16 +34,22 @@ dependencies:
|
|
34
34
|
name: websocket-driver
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0.
|
39
|
+
version: '0.6'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.8'
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
|
-
- - "
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.6'
|
50
|
+
- - "<"
|
45
51
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
52
|
+
version: '0.8'
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: cliver
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,26 +64,6 @@ dependencies:
|
|
58
64
|
- - "~>"
|
59
65
|
- !ruby/object:Gem::Version
|
60
66
|
version: '0.3'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: rack
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 2.0.6
|
68
|
-
- - "<"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '3'
|
71
|
-
type: :runtime
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 2.0.6
|
78
|
-
- - "<"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '3'
|
81
67
|
- !ruby/object:Gem::Dependency
|
82
68
|
name: image_size
|
83
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,7 +162,21 @@ dependencies:
|
|
176
162
|
- - "~>"
|
177
163
|
- !ruby/object:Gem::Version
|
178
164
|
version: '10.0'
|
179
|
-
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: puma
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '3.0'
|
172
|
+
type: :development
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '3.0'
|
179
|
+
description: Cuprite is a driver for Capybara that allows you to run your tests on
|
180
180
|
a headless Chrome browser
|
181
181
|
email:
|
182
182
|
- d.vorotilin@gmail.com
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/capybara/cuprite/browser/client.rb
|
192
192
|
- lib/capybara/cuprite/browser/dom.rb
|
193
193
|
- lib/capybara/cuprite/browser/frame.rb
|
194
|
+
- lib/capybara/cuprite/browser/input.json
|
194
195
|
- lib/capybara/cuprite/browser/input.rb
|
195
196
|
- lib/capybara/cuprite/browser/javascripts/index.js
|
196
197
|
- lib/capybara/cuprite/browser/page.rb
|