puppeteer-ruby 0.34.3 → 0.37.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/CHANGELOG.md +69 -43
- data/README.md +78 -11
- data/docs/api_coverage.md +27 -6
- data/lib/puppeteer/browser.rb +2 -8
- data/lib/puppeteer/browser_context.rb +1 -0
- data/lib/puppeteer/concurrent_ruby_utils.rb +2 -2
- data/lib/puppeteer/coverage.rb +11 -2
- data/lib/puppeteer/define_async_method.rb +1 -1
- data/lib/puppeteer/devices.rb +132 -0
- data/lib/puppeteer/dom_world.rb +10 -9
- data/lib/puppeteer/element_handle/offset.rb +28 -0
- data/lib/puppeteer/element_handle/point.rb +11 -0
- data/lib/puppeteer/element_handle.rb +68 -7
- data/lib/puppeteer/frame.rb +3 -2
- data/lib/puppeteer/js_coverage.rb +28 -7
- data/lib/puppeteer/launcher/chrome.rb +64 -4
- data/lib/puppeteer/launcher/firefox.rb +48 -4
- data/lib/puppeteer/launcher/launch_options.rb +2 -1
- data/lib/puppeteer/launcher.rb +0 -1
- data/lib/puppeteer/mouse.rb +54 -1
- data/lib/puppeteer/network_condition.rb +12 -0
- data/lib/puppeteer/network_conditions.rb +24 -0
- data/lib/puppeteer/network_manager.rb +47 -11
- data/lib/puppeteer/page/metrics.rb +49 -0
- data/lib/puppeteer/page/screenshot_options.rb +3 -1
- data/lib/puppeteer/page.rb +147 -93
- data/lib/puppeteer/puppeteer.rb +10 -2
- data/lib/puppeteer/timeout_helper.rb +22 -0
- data/lib/puppeteer/tracing.rb +6 -1
- data/lib/puppeteer/version.rb +1 -1
- data/lib/puppeteer/web_socket.rb +1 -0
- data/lib/puppeteer-ruby.rb +2 -0
- data/lib/puppeteer.rb +15 -12
- data/puppeteer-ruby.gemspec +1 -1
- metadata +10 -7
- data/Dockerfile +0 -9
- data/docker-compose.yml +0 -34
- data/lib/puppeteer/launcher/base.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e46056e6227e597554a407d47c132610af952d42b1cd7c2149e2046e0d8f1bb
|
4
|
+
data.tar.gz: 99a5c6fd6885181e32c72086a768c60583738974a3c86a05a693af2b97b51bc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4b1032b52bb5a0ad92e57f0bac5fe5208b785679f1d7efff0ab335cb28478f6110979102d0ec4759ef2f86654b4d231e018aa9cdb3982dc1ffa2e985fa4c55f
|
7
|
+
data.tar.gz: 42f81fe580fcb85b5c57397962362c3c6b0ba7462fe210c65ee017b9e73c0a3d9d091c03a7b18f6e6d78f3a3c52572a5d0bb8284f1087412344a184e8624170d
|
data/CHANGELOG.md
CHANGED
@@ -1,30 +1,57 @@
|
|
1
|
-
### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.
|
1
|
+
### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.37.0...master)]
|
2
2
|
|
3
|
-
|
3
|
+
- xxx
|
4
|
+
|
5
|
+
### 0.37.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.36.0...0.37.0)]
|
6
|
+
|
7
|
+
New features:
|
8
|
+
|
9
|
+
- Some features introduced in Puppeteer 10.4
|
10
|
+
|
11
|
+
### 0.36.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.35.1...0.36.0)]
|
12
|
+
|
13
|
+
New features:
|
14
|
+
|
15
|
+
- Drag and Drop feature introduced in Puppeteer 10.1
|
16
|
+
- `Page#emulateNetworkConditions`, `Page#emulateCPUThrottling`
|
17
|
+
- `Page#exposeFunction`
|
18
|
+
- Metrics
|
19
|
+
|
20
|
+
### 0.35.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.35.0...0.35.1)]
|
21
|
+
|
22
|
+
New features:
|
23
|
+
|
24
|
+
- Allow Rails users to use this library without `require 'puppeteer'`.
|
25
|
+
|
26
|
+
### 0.35.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.3...0.35.0)]
|
27
|
+
|
28
|
+
New features:
|
29
|
+
|
30
|
+
- Add `channel` parameter for Puppeteer.launch. Now `channel: chrome` or `channel: chrome-canary` (chrome-beta, chrome-dev is also available) automatically detects the executablePath of Google Chrome. Windows/macOS users can also use `channel: msedge`.
|
4
31
|
|
5
32
|
### 0.34.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.2...0.34.3)]
|
6
33
|
|
7
34
|
Bugfix:
|
8
35
|
|
9
|
-
|
36
|
+
- Fix wait_for_xxx's timeout error type.
|
10
37
|
|
11
38
|
### 0.34.2 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.1...0.34.2)]
|
12
39
|
|
13
40
|
New features:
|
14
41
|
|
15
|
-
|
42
|
+
- Add `Page#bring_to_front`.
|
16
43
|
|
17
44
|
### 0.34.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.0...0.34.1)]
|
18
45
|
|
19
46
|
Bugfix:
|
20
47
|
|
21
|
-
|
48
|
+
- Fix `Page#pdf` to work without `path` parameter.
|
22
49
|
|
23
50
|
### 0.34.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.33.0...0.34.0)]
|
24
51
|
|
25
52
|
New features:
|
26
53
|
|
27
|
-
|
54
|
+
- Sync API with block
|
28
55
|
|
29
56
|
### 0.33.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.4...0.33.0)]
|
30
57
|
|
@@ -32,170 +59,169 @@ NOTE: Requires Ruby version >= 2.6 explicitly since this version.
|
|
32
59
|
|
33
60
|
Bugfix:
|
34
61
|
|
35
|
-
|
62
|
+
- Fix PDF options to work correctly on decimal numbers specified.
|
36
63
|
|
37
64
|
### 0.32.4 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.3...0.32.4)]
|
38
65
|
|
39
66
|
Bugfix:
|
40
67
|
|
41
|
-
|
68
|
+
- Fix `#type_text` to input '<' correctly.
|
42
69
|
|
43
70
|
### 0.32.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.2...0.32.3)]
|
44
71
|
|
45
72
|
Bugfix:
|
46
73
|
|
47
|
-
|
48
|
-
|
74
|
+
- Fix puppeteer-ruby to work on Rails in development mode.
|
49
75
|
|
50
76
|
### 0.32.2 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.1...0.32.2)]
|
51
77
|
|
52
78
|
Bugfix:
|
53
79
|
|
54
|
-
|
80
|
+
- Fix full_page option in screenshot.
|
55
81
|
|
56
82
|
### 0.32.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.0...0.32.1)]
|
57
83
|
|
58
84
|
Bugfix:
|
59
85
|
|
60
|
-
|
86
|
+
- Fix WebSocket to work with `wss://...` endpoint (ex. browserless.io)
|
61
87
|
|
62
88
|
### 0.32.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.6...0.32.0)]
|
63
89
|
|
64
90
|
New features:
|
65
91
|
|
66
|
-
|
67
|
-
|
92
|
+
- Tracing
|
93
|
+
- JS/CSS coverages
|
68
94
|
|
69
95
|
Improvement:
|
70
96
|
|
71
|
-
|
97
|
+
- Increase stability [#92](https://github.com/YusukeIwaki/puppeteer-ruby/pull/92)
|
72
98
|
|
73
99
|
### 0.31.6 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.5...0.31.6)]
|
74
100
|
|
75
101
|
Improvement:
|
76
102
|
|
77
|
-
|
103
|
+
- Increase stability [#87](https://github.com/YusukeIwaki/puppeteer-ruby/pull/87)
|
78
104
|
|
79
105
|
### 0.31.5 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.4...0.31.5)]
|
80
106
|
|
81
107
|
Bugfix:
|
82
108
|
|
83
|
-
|
109
|
+
- Fix file uploading to work without crash.
|
84
110
|
|
85
111
|
### 0.31.4 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.3...0.31.4)]
|
86
112
|
|
87
113
|
Bugfix:
|
88
114
|
|
89
|
-
|
115
|
+
- Fix PDF options (format, margin, omit_background) to work.
|
90
116
|
|
91
117
|
### 0.31.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.1...0.31.3)]
|
92
118
|
|
93
119
|
Bugfix:
|
94
120
|
|
95
|
-
|
121
|
+
- Fix `wait_for_selector` to work. _It is strongly recommended to update for 0.29.0-0.31.x users._
|
96
122
|
|
97
123
|
### 0.31.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.0...0.31.1)]
|
98
124
|
|
99
125
|
Bugfix:
|
100
126
|
|
101
|
-
|
127
|
+
- Fix `Page#pdf` to work on Windows.
|
102
128
|
|
103
129
|
### 0.31.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.30.0...0.31.0)]
|
104
130
|
|
105
131
|
New features:
|
106
132
|
|
107
|
-
|
133
|
+
- Now puppeteer-ruby is compatible with Windows
|
108
134
|
|
109
135
|
Bugfix:
|
110
136
|
|
111
|
-
|
137
|
+
- Fix `Page#add_script_tag` and `Page#add_style_tag` to work
|
112
138
|
|
113
139
|
### 0.30.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.29.0...0.30.0)]
|
114
140
|
|
115
141
|
New features:
|
116
142
|
|
117
|
-
|
143
|
+
- S, SS, Seval, SSeval is renamed to query_selector, query_selector_all, eval_on_selector, eval_on_selector_all
|
118
144
|
|
119
145
|
### 0.29.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.28.1...0.29.0)]
|
120
146
|
|
121
147
|
New features:
|
122
148
|
|
123
|
-
|
149
|
+
- Add `AriaQueryHandler`. Now we can use "aria/...." for selectors.
|
124
150
|
|
125
151
|
### 0.28.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.27...0.28.1)]
|
126
152
|
|
127
153
|
New features:
|
128
154
|
|
129
|
-
|
130
|
-
|
155
|
+
- Add `Page#emulate_idle_state`
|
156
|
+
- Change versioning rule.
|
131
157
|
|
132
158
|
### 0.0.27 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.26...0.0.27)]
|
133
159
|
|
134
160
|
New features:
|
135
161
|
|
136
|
-
|
162
|
+
- Now puppeteer-ruby is Ruby 3.0 compatible!
|
137
163
|
|
138
164
|
### 0.0.26 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.25...0.0.26)]
|
139
165
|
|
140
166
|
Bugfix:
|
141
167
|
|
142
|
-
|
168
|
+
- Fix `Page#screenshot` working correctly with `quality` parameter.
|
143
169
|
|
144
170
|
### 0.0.25 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.23...0.0.25)]
|
145
171
|
|
146
172
|
New feature:
|
147
173
|
|
148
|
-
|
174
|
+
- **Cookie** feature: `Page#set_cookie`, `Page#cookies`
|
149
175
|
|
150
176
|
### 0.0.23 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.22...0.0.23)]
|
151
177
|
|
152
178
|
New feature:
|
153
179
|
|
154
|
-
|
155
|
-
|
180
|
+
- **GeoLocation** feature
|
181
|
+
- grant/clear permission
|
156
182
|
|
157
183
|
Bugfix/Improvement:
|
158
184
|
|
159
|
-
|
160
|
-
|
185
|
+
- Refactoring for events ([#31](https://github.com/YusukeIwaki/puppeteer-ruby/pull/31))
|
186
|
+
- Improve SEND/RECV handling in CDPSession ([#34](https://github.com/YusukeIwaki/puppeteer-ruby/pull/34))
|
161
187
|
|
162
188
|
### 0.0.22 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.21...0.0.22)]
|
163
189
|
|
164
190
|
Bugfix
|
165
191
|
|
166
|
-
|
167
|
-
|
168
|
-
|
192
|
+
- Make `Puppeteer#default_args` to work
|
193
|
+
- Respect Firefox launch options
|
194
|
+
- Respect `default_viewport: nil`
|
169
195
|
|
170
196
|
### 0.0.21 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.20...0.0.21)]
|
171
197
|
|
172
198
|
Bugfix/Improvement:
|
173
199
|
|
174
|
-
|
175
|
-
|
200
|
+
- Update DeviceDescriptors (list of emulatable devices)
|
201
|
+
- Fix bug on inputing "(" ([#25](https://github.com/YusukeIwaki/puppeteer-ruby/pull/25))
|
176
202
|
|
177
203
|
### 0.0.20 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.19...0.0.20)]
|
178
204
|
|
179
205
|
New feature
|
180
206
|
|
181
|
-
|
207
|
+
- Dialog-handling feature
|
182
208
|
|
183
209
|
### 0.0.19 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.18...0.0.19)]
|
184
210
|
|
185
211
|
New feature
|
186
212
|
|
187
|
-
|
213
|
+
- **Firefox support**
|
188
214
|
|
189
215
|
Bugfix/Improvement
|
190
216
|
|
191
|
-
|
217
|
+
- Allow `Page#keyboard` with block ([#18](https://github.com/YusukeIwaki/puppeteer-ruby/pull/18))
|
192
218
|
|
193
219
|
### 0.0.18 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.17...0.0.18)]
|
194
220
|
|
195
221
|
New feature
|
196
222
|
|
197
|
-
|
223
|
+
- **Firefox support**
|
198
224
|
|
199
225
|
Bugfix/Improvement
|
200
226
|
|
201
|
-
|
227
|
+
- Allow `Page#keyboard` with block ([#18](https://github.com/YusukeIwaki/puppeteer-ruby/pull/18))
|
data/README.md
CHANGED
@@ -20,31 +20,29 @@ gem 'puppeteer-ruby'
|
|
20
20
|
|
21
21
|
And then execute:
|
22
22
|
|
23
|
-
$ bundle
|
24
|
-
|
25
|
-
Or install it yourself as:
|
26
|
-
|
27
|
-
$ gem install puppeteer-ruby
|
23
|
+
$ bundle install
|
28
24
|
|
29
25
|
### Capture a site
|
30
26
|
|
31
27
|
```ruby
|
32
|
-
require 'puppeteer'
|
28
|
+
require 'puppeteer-ruby'
|
33
29
|
|
34
30
|
Puppeteer.launch(headless: false) do |browser|
|
35
|
-
page = browser.
|
31
|
+
page = browser.new_page
|
36
32
|
page.goto("https://github.com/YusukeIwaki")
|
37
33
|
page.screenshot(path: "YusukeIwaki.png")
|
38
34
|
end
|
39
35
|
```
|
40
36
|
|
37
|
+
NOTE: `require 'puppeteer-ruby'` is not necessary in Rails.
|
38
|
+
|
41
39
|
### Simple scraping
|
42
40
|
|
43
41
|
```ruby
|
44
|
-
require 'puppeteer'
|
42
|
+
require 'puppeteer-ruby'
|
45
43
|
|
46
44
|
Puppeteer.launch(headless: false, slow_mo: 50, args: ['--guest', '--window-size=1280,800']) do |browser|
|
47
|
-
page = browser.
|
45
|
+
page = browser.new_page
|
48
46
|
page.viewport = Puppeteer::Viewport.new(width: 1280, height: 800)
|
49
47
|
page.goto("https://github.com/", wait_until: 'domcontentloaded')
|
50
48
|
|
@@ -69,10 +67,10 @@ end
|
|
69
67
|
### Evaluate JavaScript
|
70
68
|
|
71
69
|
```ruby
|
72
|
-
require 'puppeteer'
|
70
|
+
require 'puppeteer-ruby'
|
73
71
|
|
74
72
|
Puppeteer.launch do |browser|
|
75
|
-
page = browser.
|
73
|
+
page = browser.new_page
|
76
74
|
page.goto 'https://github.com/YusukeIwaki'
|
77
75
|
|
78
76
|
# Get the "viewport" of the page, as reported by the page.
|
@@ -158,6 +156,75 @@ RSpec.describe 'hotel.testplanisphere.dev', type: :feature do
|
|
158
156
|
|
159
157
|
The detailed step of configuration can be found [here](https://github.com/YusukeIwaki/puppeteer-ruby-example/tree/master/_with_capybara-rspec).
|
160
158
|
|
159
|
+
## :bulb: Use Puppeteer methods simply without Capybara::DSL
|
160
|
+
|
161
|
+
We can also use puppeteer-ruby as it is without Capybara DSL. When you want to just test a Rails application simply with Puppeteer, refer this section.
|
162
|
+
|
163
|
+
Also, if you have trouble with handling flaky/unstable testcases in existing feature/system specs, consider replacing Capybara::DSL with raw puppeteer-ruby codes like `page.wait_for_selector(...)` or `page.wait_for_navigation { ... }`.
|
164
|
+
|
165
|
+
Capybara prepares test server even when Capybara DSL is not used.
|
166
|
+
|
167
|
+
Sample configuration is shown below. You can use it by putting the file at `spec/support/puppeteer_ruby.rb` or another location where RSpec loads on initialization.
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
RSpec.configure do |config|
|
171
|
+
require 'capybara'
|
172
|
+
|
173
|
+
# This driver only requests Capybara to launch test server.
|
174
|
+
# Remark that no Capybara::DSL is available with this driver.
|
175
|
+
class CapybaraNullDriver < Capybara::Driver::Base
|
176
|
+
def needs_server?
|
177
|
+
true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
Capybara.register_driver(:null) { CapybaraNullDriver.new }
|
182
|
+
|
183
|
+
config.around(driver: :null) do |example|
|
184
|
+
Capybara.current_driver = :null
|
185
|
+
|
186
|
+
# Rails server is launched here,
|
187
|
+
# (at the first time of accessing Capybara.current_session.server)
|
188
|
+
@base_url = Capybara.current_session.server.base_url
|
189
|
+
|
190
|
+
require 'puppeteer'
|
191
|
+
launch_options = {
|
192
|
+
# Use launch options as you like.
|
193
|
+
channel: :chrome,
|
194
|
+
headless: false,
|
195
|
+
}
|
196
|
+
Puppeteer.launch(**launch_options) do |browser|
|
197
|
+
@puppeteer_page = browser.new_page
|
198
|
+
example.run
|
199
|
+
end
|
200
|
+
|
201
|
+
Capybara.reset_sessions!
|
202
|
+
Capybara.use_default_driver
|
203
|
+
end
|
204
|
+
end
|
205
|
+
```
|
206
|
+
|
207
|
+
Now, we can work with integration test using `Puppeteer::Page` in puppeteer-ruby.
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
RSpec.describe 'Sample integration tests', driver: :null do
|
211
|
+
let(:page) { @puppeteer_page }
|
212
|
+
let(:base_url) { @base_url }
|
213
|
+
|
214
|
+
it 'should work with Puppeteer' do
|
215
|
+
# null driver only launches server, and Capybara::DSL is unavailable.
|
216
|
+
expect { visit '/' }.to raise_error(/NotImplementedError/)
|
217
|
+
|
218
|
+
page.goto("#{base_url}/")
|
219
|
+
|
220
|
+
# Automation with Puppeteer
|
221
|
+
h1_text = page.eval_on_selector('h1', '(el) => el.textContent')
|
222
|
+
expect(h1_text).to eq('It works!')
|
223
|
+
end
|
224
|
+
end
|
225
|
+
```
|
226
|
+
|
227
|
+
|
161
228
|
## API
|
162
229
|
|
163
230
|
https://yusukeiwaki.github.io/puppeteer-ruby-docs/
|
data/docs/api_coverage.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# API coverages
|
2
|
-
- Puppeteer version: v10.
|
3
|
-
- puppeteer-ruby version: 0.
|
2
|
+
- Puppeteer version: v10.4.0
|
3
|
+
- puppeteer-ruby version: 0.37.0
|
4
4
|
|
5
5
|
## Puppeteer
|
6
6
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
* ~~errors~~
|
14
14
|
* executablePath => `#executable_path`
|
15
15
|
* launch
|
16
|
-
*
|
16
|
+
* networkConditions => `#network_conditions`
|
17
17
|
* product
|
18
18
|
* ~~registerCustomQueryHandler~~
|
19
19
|
* ~~unregisterCustomQueryHandler~~
|
@@ -78,18 +78,20 @@
|
|
78
78
|
* content
|
79
79
|
* cookies
|
80
80
|
* coverage
|
81
|
+
* createPDFStream => `#create_pdf_stream`
|
81
82
|
* deleteCookie => `#delete_cookie`
|
82
83
|
* emulate
|
84
|
+
* emulateCPUThrottling => `#emulate_cpu_throttling`
|
83
85
|
* emulateIdleState => `#emulate_idle_state`
|
84
86
|
* emulateMediaFeatures => `#emulate_media_features`
|
85
87
|
* emulateMediaType => `#emulate_media_type`
|
86
|
-
*
|
88
|
+
* emulateNetworkConditions => `#emulate_network_conditions`
|
87
89
|
* emulateTimezone => `#emulate_timezone`
|
88
90
|
* emulateVisionDeficiency => `#emulate_vision_deficiency`
|
89
91
|
* evaluate
|
90
92
|
* evaluateHandle => `#evaluate_handle`
|
91
93
|
* evaluateOnNewDocument => `#evaluate_on_new_document`
|
92
|
-
*
|
94
|
+
* exposeFunction => `#expose_function`
|
93
95
|
* focus
|
94
96
|
* frames
|
95
97
|
* goBack => `#go_back`
|
@@ -97,10 +99,11 @@
|
|
97
99
|
* goto
|
98
100
|
* hover
|
99
101
|
* isClosed => `#closed?`
|
102
|
+
* isDragInterceptionEnabled => `#drag_interception_enabled?`
|
100
103
|
* isJavaScriptEnabled => `#javascript_enabled?`
|
101
104
|
* keyboard
|
102
105
|
* mainFrame => `#main_frame`
|
103
|
-
*
|
106
|
+
* metrics
|
104
107
|
* mouse
|
105
108
|
* pdf
|
106
109
|
* queryObjects => `#query_objects`
|
@@ -113,6 +116,7 @@
|
|
113
116
|
* setCookie => `#set_cookie`
|
114
117
|
* setDefaultNavigationTimeout => `#default_navigation_timeout=`
|
115
118
|
* setDefaultTimeout => `#default_timeout=`
|
119
|
+
* ~~setDragInterception~~
|
116
120
|
* setExtraHTTPHeaders => `#extra_http_headers=`
|
117
121
|
* setGeolocation => `#geolocation=`
|
118
122
|
* setJavaScriptEnabled => `#javascript_enabled=`
|
@@ -132,6 +136,7 @@
|
|
132
136
|
* waitForFileChooser => `#wait_for_file_chooser`
|
133
137
|
* waitForFunction => `#wait_for_function`
|
134
138
|
* waitForNavigation => `#wait_for_navigation`
|
139
|
+
* ~~waitForNetworkIdle~~
|
135
140
|
* waitForRequest => `#wait_for_request`
|
136
141
|
* waitForResponse => `#wait_for_response`
|
137
142
|
* waitForSelector => `#wait_for_selector`
|
@@ -162,6 +167,11 @@
|
|
162
167
|
|
163
168
|
* click
|
164
169
|
* down
|
170
|
+
* drag
|
171
|
+
* dragAndDrop => `#drag_and_drop`
|
172
|
+
* dragEnter => `#drag_enter`
|
173
|
+
* dragOver => `#drag_over`
|
174
|
+
* drop
|
165
175
|
* move
|
166
176
|
* up
|
167
177
|
* wheel
|
@@ -260,8 +270,14 @@
|
|
260
270
|
* boundingBox => `#bounding_box`
|
261
271
|
* boxModel => `#box_model`
|
262
272
|
* click
|
273
|
+
* clickablePoint => `#clickable_point`
|
263
274
|
* contentFrame => `#content_frame`
|
264
275
|
* dispose
|
276
|
+
* drag
|
277
|
+
* dragAndDrop => `#drag_and_drop`
|
278
|
+
* dragEnter => `#drag_enter`
|
279
|
+
* dragOver => `#drag_over`
|
280
|
+
* drop
|
265
281
|
* evaluate
|
266
282
|
* evaluateHandle => `#evaluate_handle`
|
267
283
|
* executionContext => `#execution_context`
|
@@ -282,8 +298,12 @@
|
|
282
298
|
## ~~HTTPRequest~~
|
283
299
|
|
284
300
|
* ~~abort~~
|
301
|
+
* ~~abortErrorReason~~
|
285
302
|
* ~~continue~~
|
303
|
+
* ~~continueRequestOverrides~~
|
304
|
+
* ~~enqueueInterceptAction~~
|
286
305
|
* ~~failure~~
|
306
|
+
* ~~finalizeInterceptions~~
|
287
307
|
* ~~frame~~
|
288
308
|
* ~~headers~~
|
289
309
|
* ~~isNavigationRequest~~
|
@@ -293,6 +313,7 @@
|
|
293
313
|
* ~~resourceType~~
|
294
314
|
* ~~respond~~
|
295
315
|
* ~~response~~
|
316
|
+
* ~~responseForRequest~~
|
296
317
|
* ~~url~~
|
297
318
|
|
298
319
|
## ~~HTTPResponse~~
|
data/lib/puppeteer/browser.rb
CHANGED
@@ -223,7 +223,7 @@ class Puppeteer::Browser
|
|
223
223
|
# @param predicate [Proc(Puppeteer::Target -> Boolean)]
|
224
224
|
# @return [Puppeteer::Target]
|
225
225
|
def wait_for_target(predicate:, timeout: nil)
|
226
|
-
|
226
|
+
timeout_helper = Puppeteer::TimeoutHelper.new('target', timeout_ms: timeout, default_timeout_ms: 30000)
|
227
227
|
existing_target = targets.find { |target| predicate.call(target) }
|
228
228
|
return existing_target if existing_target
|
229
229
|
|
@@ -241,15 +241,9 @@ class Puppeteer::Browser
|
|
241
241
|
end
|
242
242
|
|
243
243
|
begin
|
244
|
-
|
245
|
-
Timeout.timeout(timeout_in_sec) do
|
246
|
-
target_promise.value!
|
247
|
-
end
|
248
|
-
else
|
244
|
+
timeout_helper.with_timeout do
|
249
245
|
target_promise.value!
|
250
246
|
end
|
251
|
-
rescue Timeout::Error
|
252
|
-
raise Puppeteer::TimeoutError.new("waiting for target failed: timeout #{timeout}ms exceeded")
|
253
247
|
ensure
|
254
248
|
remove_event_listener(*event_listening_ids)
|
255
249
|
end
|
@@ -74,6 +74,7 @@ class Puppeteer::BrowserContext
|
|
74
74
|
'clipboard-read' => 'clipboardReadWrite',
|
75
75
|
'clipboard-write' => 'clipboardReadWrite',
|
76
76
|
'payment-handler' => 'paymentHandler',
|
77
|
+
'persistent-storage' => 'durableStorage',
|
77
78
|
'idle-detection' => 'idleDetection',
|
78
79
|
# chrome-specific permissions we have.
|
79
80
|
'midi-sysex' => 'midiSysex',
|
@@ -3,11 +3,11 @@ module Puppeteer::ConcurrentRubyUtils
|
|
3
3
|
module ConcurrentPromisesFutureExtension
|
4
4
|
# Extension for describing 2 concurrent tasks smartly.
|
5
5
|
#
|
6
|
-
# page.
|
6
|
+
# page.async_wait_for_navigation.with_waiting_for_complete do
|
7
7
|
# page.click('#submit')
|
8
8
|
# end
|
9
9
|
def with_waiting_for_complete(&block)
|
10
|
-
async_block_call = Concurrent::Promises.
|
10
|
+
async_block_call = Concurrent::Promises.delay do
|
11
11
|
block.call
|
12
12
|
rescue => err
|
13
13
|
Logger.new($stderr).warn(err)
|
data/lib/puppeteer/coverage.rb
CHANGED
@@ -5,10 +5,14 @@ class Puppeteer::Coverage
|
|
5
5
|
@css = Puppeteer::CSSCoverage.new(client)
|
6
6
|
end
|
7
7
|
|
8
|
-
def start_js_coverage(
|
8
|
+
def start_js_coverage(
|
9
|
+
reset_on_navigation: nil,
|
10
|
+
report_anonymous_scripts: nil,
|
11
|
+
include_raw_script_coverage: nil)
|
9
12
|
@js.start(
|
10
13
|
reset_on_navigation: reset_on_navigation,
|
11
14
|
report_anonymous_scripts: report_anonymous_scripts,
|
15
|
+
include_raw_script_coverage: include_raw_script_coverage,
|
12
16
|
)
|
13
17
|
end
|
14
18
|
|
@@ -16,7 +20,11 @@ class Puppeteer::Coverage
|
|
16
20
|
@js.stop
|
17
21
|
end
|
18
22
|
|
19
|
-
def js_coverage(
|
23
|
+
def js_coverage(
|
24
|
+
reset_on_navigation: nil,
|
25
|
+
report_anonymous_scripts: nil,
|
26
|
+
include_raw_script_coverage: nil,
|
27
|
+
&block)
|
20
28
|
unless block
|
21
29
|
raise ArgumentError.new('Block must be given')
|
22
30
|
end
|
@@ -24,6 +32,7 @@ class Puppeteer::Coverage
|
|
24
32
|
start_js_coverage(
|
25
33
|
reset_on_navigation: reset_on_navigation,
|
26
34
|
report_anonymous_scripts: report_anonymous_scripts,
|
35
|
+
include_raw_script_coverage: include_raw_script_coverage,
|
27
36
|
)
|
28
37
|
block.call
|
29
38
|
stop_js_coverage
|