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.
@@ -40,10 +40,7 @@ module Capybara::Cuprite
40
40
  end
41
41
 
42
42
  def switch_to_window(target_id)
43
- page = @targets[target_id]
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 send_message(data)
43
- @started_at ||= Time.now.to_f
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("[#{Time.now.to_f - @started_at}] <<< #{event.data}\n")
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 options[:with]
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
- find_modal(options)
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 " \
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Capybara
4
4
  module Cuprite
5
- VERSION = "0.2.1"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
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.2.1
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-16 00:00:00.000000000 Z
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.7'
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.7'
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
- description: Cuprite is a driver for Capybara that allows you torun your tests on
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