cuprite 0.8 → 0.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dcb46f5716c12a1a33acb66d1e7827897f1331447806f52379571226ac4dfe9c
4
- data.tar.gz: 8ca919e8ebdfef7a4a16613b0c0620084365d3231dbbe5b7d96bc18bf0f1cf9a
3
+ metadata.gz: 979d242c40547bfd784a54a15fa1ba81afc251a805f71880a234b4fd055f3afb
4
+ data.tar.gz: 433ff62183910210a57f5b1022a7807d3e8dc5ac86dbaf62879660b957a67b94
5
5
  SHA512:
6
- metadata.gz: a3451efdac94c66d55d8afb49ee5497a91c48d7b2b9b0e9728b49f9c44ad4fa7c5d780a81ec7a4650f9a35a2370846b7da5782e9c6867cd0774d3204509e085a
7
- data.tar.gz: 6e33306c0157a88640d5b546faddef248576208eca188fe4898ff898023717a2439a138dbdfe98670b6cae4b03a5b81cce2b5eaa93d73c2f266f6761bd72603d
6
+ metadata.gz: 5495435618d770085085f9b992646e03e1b1271b20cefc8c7e0f1d4313abd398a161f3b85038e0583bd6834d55adc8052393d2e5dc61c1d395edbe5e90fb29f5
7
+ data.tar.gz: 64b6b8a516e44642e6dfeb3981081b5e1d7cd0489c4741358f841013f74f8268b6bdaf63017262ed2f70f6d83a8cc4a3c548bf3da33b86409e64695620a8e108
data/README.md CHANGED
@@ -116,17 +116,26 @@ be automatically cleared at the end of the test.
116
116
  * `page.driver.network_traffic` Inspect network traffic (resources have been
117
117
  loaded) on the current page. This returns an array of request objects.
118
118
 
119
-
120
119
  ```ruby
121
120
  page.driver.network_traffic # => [Request, ...]
122
121
  request = page.driver.network_traffic.first
123
122
  request.response
124
123
  ```
125
124
 
125
+ * `page.driver.wait_for_network_idle` Natively waits for network idle and if
126
+ there are no active connections returns or raises `TimeoutError` error. Accepts
127
+ the same options as Ferrum's [`wait_for_idle`](https://github.com/route/ferrum#wait_for_idleoptions)
128
+
129
+ ```ruby
130
+ page.driver.wait_for_network_idle
131
+ page.driver.refresh
132
+ ```
133
+
126
134
  Please note that network traffic is not cleared when you visit new page. You can
127
135
  manually clear the network traffic by calling `page.driver.clear_network_traffic`
128
136
  or `page.driver.reset`
129
137
 
138
+
130
139
  ### Manipulating cookies ###
131
140
 
132
141
  The following methods are used to inspect and manipulate cookies:
@@ -189,7 +198,7 @@ end
189
198
 
190
199
  ## License ##
191
200
 
192
- Copyright 2018-2019 Machinio
201
+ Copyright 2018-2020 Machinio
193
202
 
194
203
  Permission is hereby granted, free of charge, to any person obtaining
195
204
  a copy of this software and associated documentation files (the
@@ -2,18 +2,12 @@
2
2
 
3
3
  require "ferrum"
4
4
  require "capybara"
5
-
6
- module Capybara::Cuprite
7
- end
8
-
9
5
  require "capybara/cuprite/driver"
10
6
  require "capybara/cuprite/browser"
11
7
  require "capybara/cuprite/page"
12
8
  require "capybara/cuprite/node"
13
9
  require "capybara/cuprite/errors"
14
10
 
15
- Ferrum::Page.prepend(Capybara::Cuprite::Page)
16
-
17
11
  Capybara.register_driver(:cuprite) do |app|
18
12
  Capybara::Cuprite::Driver.new(app)
19
13
  end
@@ -23,12 +23,12 @@ module Capybara::Cuprite
23
23
 
24
24
  def page
25
25
  raise Ferrum::NoSuchPageError if @page.nil?
26
- @page ||= default_context.page
26
+ @page ||= attach_page
27
27
  end
28
28
 
29
29
  def reset
30
30
  super
31
- @page = default_context.page
31
+ @page = attach_page
32
32
  end
33
33
 
34
34
  def quit
@@ -81,7 +81,7 @@ module Capybara::Cuprite
81
81
 
82
82
  if Capybara::VERSION.to_f < 3.0
83
83
  target_id = window_handles.find do |target_id|
84
- page = targets[target_id].page
84
+ page = attach_page(target_id)
85
85
  locator == page.frame_name
86
86
  end
87
87
  locator = target_id if target_id
@@ -100,13 +100,13 @@ module Capybara::Cuprite
100
100
  def switch_to_window(target_id)
101
101
  target = targets[target_id]
102
102
  raise Ferrum::NoSuchPageError unless target
103
- @page = target.page
103
+ @page = attach_page(target.id)
104
104
  end
105
105
 
106
106
  def close_window(target_id)
107
107
  target = targets[target_id]
108
108
  raise Ferrum::NoSuchPageError unless target
109
- @page = nil if @page == target.page
109
+ @page = nil if @page.target_id == target.id
110
110
  target.page.close
111
111
  end
112
112
 
@@ -200,5 +200,15 @@ module Capybara::Cuprite
200
200
  end
201
201
  end
202
202
  end
203
+
204
+ def attach_page(target_id = nil)
205
+ target = targets[target_id] if target_id
206
+ target ||= default_context.default_target
207
+ return target.page if target.attached?
208
+
209
+ target.maybe_sleep_if_new_window
210
+ target.page = Page.new(target.id, self)
211
+ target.page
212
+ end
203
213
  end
204
214
  end
@@ -26,6 +26,8 @@ module Capybara::Cuprite
26
26
  @screen_size ||= DEFAULT_MAXIMIZE_SCREEN_SIZE
27
27
 
28
28
  @options[:save_path] = Capybara.save_path.to_s if Capybara.save_path
29
+
30
+ ENV["FERRUM_DEBUG"] = "true" if ENV["CUPRITE_DEBUG"]
29
31
  end
30
32
 
31
33
  def needs_server?
@@ -129,7 +131,10 @@ module Capybara::Cuprite
129
131
  end
130
132
 
131
133
  def open_new_window
132
- browser.create_page
134
+ target = browser.default_context.create_target
135
+ target.maybe_sleep_if_new_window
136
+ target.page = Page.new(target.id, browser)
137
+ target.page
133
138
  end
134
139
 
135
140
  def switch_to_window(handle)
@@ -282,6 +287,10 @@ module Capybara::Cuprite
282
287
  browser.cookies.clear
283
288
  end
284
289
 
290
+ def wait_for_network_idle(**options)
291
+ browser.network.wait_for_idle(**options)
292
+ end
293
+
285
294
  def clear_memory_cache
286
295
  browser.network.clear(:cache)
287
296
  end
@@ -128,7 +128,7 @@ class Cuprite {
128
128
  this.trigger(node, "focus");
129
129
  this.setValue(node, "");
130
130
 
131
- if (node.type == "number" || node.type == "date") {
131
+ if (node.type == "number" || node.type == "date" || node.type == "range") {
132
132
  this.setValue(node, value);
133
133
  this.input(node);
134
134
  } else if (node.type == "time") {
@@ -3,15 +3,14 @@
3
3
  require "forwardable"
4
4
 
5
5
  module Capybara::Cuprite
6
- module Page
6
+ class Page < Ferrum::Page
7
7
  MODAL_WAIT = ENV.fetch("CUPRITE_MODAL_WAIT", 0.05).to_f
8
8
  TRIGGER_CLICK_WAIT = ENV.fetch("CUPRITE_TRIGGER_CLICK_WAIT", 0.1).to_f
9
9
 
10
10
  extend Forwardable
11
11
  delegate %i[at_css at_xpath css xpath
12
- current_url current_title body
13
- execution_id evaluate evaluate_on evaluate_async execute] => :active_frame
14
-
12
+ current_url current_title body execution_id
13
+ evaluate evaluate_on evaluate_async execute] => :active_frame
15
14
 
16
15
  def initialize(*args)
17
16
  @frame_stack = []
@@ -114,6 +113,10 @@ module Capybara::Cuprite
114
113
  end
115
114
  end
116
115
 
116
+ def frame_name
117
+ evaluate("window.name")
118
+ end
119
+
117
120
  def title
118
121
  active_frame.current_title
119
122
  end
@@ -129,15 +132,15 @@ module Capybara::Cuprite
129
132
  on(:request) do |request, index, total|
130
133
  if @browser.url_blacklist && !@browser.url_blacklist.empty?
131
134
  if @browser.url_blacklist.any? { |r| request.match?(r) }
132
- request.abort and return
135
+ request.abort and next
133
136
  else
134
- request.continue and return
137
+ request.continue and next
135
138
  end
136
139
  elsif @browser.url_whitelist && !@browser.url_whitelist.empty?
137
140
  if @browser.url_whitelist.any? { |r| request.match?(r) }
138
- request.continue and return
141
+ request.continue and next
139
142
  else
140
- request.abort and return
143
+ request.abort and next
141
144
  end
142
145
  elsif index + 1 < total
143
146
  # There are other callbacks that may handle this request
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Capybara
4
4
  module Cuprite
5
- VERSION = "0.8"
5
+ VERSION = "0.9"
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.8'
4
+ version: '0.9'
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-10-29 00:00:00.000000000 Z
11
+ date: 2020-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.6.0
39
+ version: 0.7.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.6.0
46
+ version: 0.7.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: image_size
49
49
  requirement: !ruby/object:Gem::Requirement