puppeteer-ruby 0.35.1 → 0.37.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +71 -45
- data/README.md +69 -0
- data/docs/api_coverage.md +55 -45
- data/lib/puppeteer/browser.rb +2 -8
- data/lib/puppeteer/browser_context.rb +1 -0
- data/lib/puppeteer/browser_runner.rb +1 -1
- 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 +4 -3
- data/lib/puppeteer/frame_manager.rb +2 -2
- data/lib/puppeteer/{request.rb → http_request.rb} +150 -21
- data/lib/puppeteer/{response.rb → http_response.rb} +2 -2
- data/lib/puppeteer/js_coverage.rb +28 -7
- data/lib/puppeteer/launcher/launch_options.rb +3 -3
- data/lib/puppeteer/lifecycle_watcher.rb +2 -2
- 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 +64 -18
- data/lib/puppeteer/page/metrics.rb +49 -0
- data/lib/puppeteer/page/screenshot_options.rb +3 -1
- data/lib/puppeteer/page.rb +166 -134
- data/lib/puppeteer/puppeteer.rb +5 -0
- 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/wait_task.rb +1 -1
- data/lib/puppeteer/web_socket.rb +1 -0
- data/lib/puppeteer.rb +17 -14
- data/puppeteer-ruby.gemspec +1 -1
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a83ed41b8bd2c8068dc4a1738fa16abe80e88e59fb21c4768994ae640bb5b567
|
4
|
+
data.tar.gz: 6e67fb0d381644bb376d09d01213320170aa5f9ec429694c9b98888bd2006722
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b229ccf33f63425298aa0d70051d6d6a1d61d9509bf6030499521b11494fb7b9ece03fa63ab5c31be6b0a552f28b5d7b571b6c930027445cee60bbcadaada24c
|
7
|
+
data.tar.gz: 6f35fb3ea22f4cd557e062576fdb95939f16e62c611f09469bf8d7647f72ff380000e1b94ac8e1412b03f9107124a5ce21914c4e2b839e893ecd275ed73b9ef3
|
data/CHANGELOG.md
CHANGED
@@ -1,42 +1,69 @@
|
|
1
|
-
### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.
|
1
|
+
### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.37.2...master)]
|
2
2
|
|
3
|
-
|
3
|
+
- xxx
|
4
|
+
|
5
|
+
### 0.37.2 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.37.1...0.37.2)]
|
6
|
+
|
7
|
+
Bugfix:
|
8
|
+
|
9
|
+
- `timeout: 0` did set the timeout value to zero. Now it disables the timeout as expected.
|
10
|
+
|
11
|
+
### 0.37.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.37.0...0.37.1)]
|
12
|
+
|
13
|
+
Bugfix:
|
14
|
+
|
15
|
+
- Fix handle_SIGINT, handle_SIGTERM, handle_SIGHUP options to work with `false` value specified.
|
16
|
+
|
17
|
+
### 0.37.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.36.0...0.37.0)]
|
18
|
+
|
19
|
+
New features:
|
20
|
+
|
21
|
+
- Some features introduced in Puppeteer 10.4
|
22
|
+
|
23
|
+
### 0.36.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.35.1...0.36.0)]
|
24
|
+
|
25
|
+
New features:
|
26
|
+
|
27
|
+
- Drag and Drop feature introduced in Puppeteer 10.1
|
28
|
+
- `Page#emulateNetworkConditions`, `Page#emulateCPUThrottling`
|
29
|
+
- `Page#exposeFunction`
|
30
|
+
- Metrics
|
4
31
|
|
5
32
|
### 0.35.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.35.0...0.35.1)]
|
6
33
|
|
7
34
|
New features:
|
8
35
|
|
9
|
-
|
36
|
+
- Allow Rails users to use this library without `require 'puppeteer'`.
|
10
37
|
|
11
38
|
### 0.35.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.3...0.35.0)]
|
12
39
|
|
13
40
|
New features:
|
14
41
|
|
15
|
-
|
42
|
+
- 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`.
|
16
43
|
|
17
44
|
### 0.34.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.2...0.34.3)]
|
18
45
|
|
19
46
|
Bugfix:
|
20
47
|
|
21
|
-
|
48
|
+
- Fix wait_for_xxx's timeout error type.
|
22
49
|
|
23
50
|
### 0.34.2 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.1...0.34.2)]
|
24
51
|
|
25
52
|
New features:
|
26
53
|
|
27
|
-
|
54
|
+
- Add `Page#bring_to_front`.
|
28
55
|
|
29
56
|
### 0.34.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.0...0.34.1)]
|
30
57
|
|
31
58
|
Bugfix:
|
32
59
|
|
33
|
-
|
60
|
+
- Fix `Page#pdf` to work without `path` parameter.
|
34
61
|
|
35
62
|
### 0.34.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.33.0...0.34.0)]
|
36
63
|
|
37
64
|
New features:
|
38
65
|
|
39
|
-
|
66
|
+
- Sync API with block
|
40
67
|
|
41
68
|
### 0.33.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.4...0.33.0)]
|
42
69
|
|
@@ -44,170 +71,169 @@ NOTE: Requires Ruby version >= 2.6 explicitly since this version.
|
|
44
71
|
|
45
72
|
Bugfix:
|
46
73
|
|
47
|
-
|
74
|
+
- Fix PDF options to work correctly on decimal numbers specified.
|
48
75
|
|
49
76
|
### 0.32.4 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.3...0.32.4)]
|
50
77
|
|
51
78
|
Bugfix:
|
52
79
|
|
53
|
-
|
80
|
+
- Fix `#type_text` to input '<' correctly.
|
54
81
|
|
55
82
|
### 0.32.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.2...0.32.3)]
|
56
83
|
|
57
84
|
Bugfix:
|
58
85
|
|
59
|
-
|
60
|
-
|
86
|
+
- Fix puppeteer-ruby to work on Rails in development mode.
|
61
87
|
|
62
88
|
### 0.32.2 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.1...0.32.2)]
|
63
89
|
|
64
90
|
Bugfix:
|
65
91
|
|
66
|
-
|
92
|
+
- Fix full_page option in screenshot.
|
67
93
|
|
68
94
|
### 0.32.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.32.0...0.32.1)]
|
69
95
|
|
70
96
|
Bugfix:
|
71
97
|
|
72
|
-
|
98
|
+
- Fix WebSocket to work with `wss://...` endpoint (ex. browserless.io)
|
73
99
|
|
74
100
|
### 0.32.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.6...0.32.0)]
|
75
101
|
|
76
102
|
New features:
|
77
103
|
|
78
|
-
|
79
|
-
|
104
|
+
- Tracing
|
105
|
+
- JS/CSS coverages
|
80
106
|
|
81
107
|
Improvement:
|
82
108
|
|
83
|
-
|
109
|
+
- Increase stability [#92](https://github.com/YusukeIwaki/puppeteer-ruby/pull/92)
|
84
110
|
|
85
111
|
### 0.31.6 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.5...0.31.6)]
|
86
112
|
|
87
113
|
Improvement:
|
88
114
|
|
89
|
-
|
115
|
+
- Increase stability [#87](https://github.com/YusukeIwaki/puppeteer-ruby/pull/87)
|
90
116
|
|
91
117
|
### 0.31.5 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.4...0.31.5)]
|
92
118
|
|
93
119
|
Bugfix:
|
94
120
|
|
95
|
-
|
121
|
+
- Fix file uploading to work without crash.
|
96
122
|
|
97
123
|
### 0.31.4 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.3...0.31.4)]
|
98
124
|
|
99
125
|
Bugfix:
|
100
126
|
|
101
|
-
|
127
|
+
- Fix PDF options (format, margin, omit_background) to work.
|
102
128
|
|
103
129
|
### 0.31.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.1...0.31.3)]
|
104
130
|
|
105
131
|
Bugfix:
|
106
132
|
|
107
|
-
|
133
|
+
- Fix `wait_for_selector` to work. _It is strongly recommended to update for 0.29.0-0.31.x users._
|
108
134
|
|
109
135
|
### 0.31.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.0...0.31.1)]
|
110
136
|
|
111
137
|
Bugfix:
|
112
138
|
|
113
|
-
|
139
|
+
- Fix `Page#pdf` to work on Windows.
|
114
140
|
|
115
141
|
### 0.31.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.30.0...0.31.0)]
|
116
142
|
|
117
143
|
New features:
|
118
144
|
|
119
|
-
|
145
|
+
- Now puppeteer-ruby is compatible with Windows
|
120
146
|
|
121
147
|
Bugfix:
|
122
148
|
|
123
|
-
|
149
|
+
- Fix `Page#add_script_tag` and `Page#add_style_tag` to work
|
124
150
|
|
125
151
|
### 0.30.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.29.0...0.30.0)]
|
126
152
|
|
127
153
|
New features:
|
128
154
|
|
129
|
-
|
155
|
+
- S, SS, Seval, SSeval is renamed to query_selector, query_selector_all, eval_on_selector, eval_on_selector_all
|
130
156
|
|
131
157
|
### 0.29.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.28.1...0.29.0)]
|
132
158
|
|
133
159
|
New features:
|
134
160
|
|
135
|
-
|
161
|
+
- Add `AriaQueryHandler`. Now we can use "aria/...." for selectors.
|
136
162
|
|
137
163
|
### 0.28.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.27...0.28.1)]
|
138
164
|
|
139
165
|
New features:
|
140
166
|
|
141
|
-
|
142
|
-
|
167
|
+
- Add `Page#emulate_idle_state`
|
168
|
+
- Change versioning rule.
|
143
169
|
|
144
170
|
### 0.0.27 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.26...0.0.27)]
|
145
171
|
|
146
172
|
New features:
|
147
173
|
|
148
|
-
|
174
|
+
- Now puppeteer-ruby is Ruby 3.0 compatible!
|
149
175
|
|
150
176
|
### 0.0.26 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.25...0.0.26)]
|
151
177
|
|
152
178
|
Bugfix:
|
153
179
|
|
154
|
-
|
180
|
+
- Fix `Page#screenshot` working correctly with `quality` parameter.
|
155
181
|
|
156
182
|
### 0.0.25 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.23...0.0.25)]
|
157
183
|
|
158
184
|
New feature:
|
159
185
|
|
160
|
-
|
186
|
+
- **Cookie** feature: `Page#set_cookie`, `Page#cookies`
|
161
187
|
|
162
188
|
### 0.0.23 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.22...0.0.23)]
|
163
189
|
|
164
190
|
New feature:
|
165
191
|
|
166
|
-
|
167
|
-
|
192
|
+
- **GeoLocation** feature
|
193
|
+
- grant/clear permission
|
168
194
|
|
169
195
|
Bugfix/Improvement:
|
170
196
|
|
171
|
-
|
172
|
-
|
197
|
+
- Refactoring for events ([#31](https://github.com/YusukeIwaki/puppeteer-ruby/pull/31))
|
198
|
+
- Improve SEND/RECV handling in CDPSession ([#34](https://github.com/YusukeIwaki/puppeteer-ruby/pull/34))
|
173
199
|
|
174
200
|
### 0.0.22 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.21...0.0.22)]
|
175
201
|
|
176
202
|
Bugfix
|
177
203
|
|
178
|
-
|
179
|
-
|
180
|
-
|
204
|
+
- Make `Puppeteer#default_args` to work
|
205
|
+
- Respect Firefox launch options
|
206
|
+
- Respect `default_viewport: nil`
|
181
207
|
|
182
208
|
### 0.0.21 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.20...0.0.21)]
|
183
209
|
|
184
210
|
Bugfix/Improvement:
|
185
211
|
|
186
|
-
|
187
|
-
|
212
|
+
- Update DeviceDescriptors (list of emulatable devices)
|
213
|
+
- Fix bug on inputing "(" ([#25](https://github.com/YusukeIwaki/puppeteer-ruby/pull/25))
|
188
214
|
|
189
215
|
### 0.0.20 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.19...0.0.20)]
|
190
216
|
|
191
217
|
New feature
|
192
218
|
|
193
|
-
|
219
|
+
- Dialog-handling feature
|
194
220
|
|
195
221
|
### 0.0.19 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.18...0.0.19)]
|
196
222
|
|
197
223
|
New feature
|
198
224
|
|
199
|
-
|
225
|
+
- **Firefox support**
|
200
226
|
|
201
227
|
Bugfix/Improvement
|
202
228
|
|
203
|
-
|
229
|
+
- Allow `Page#keyboard` with block ([#18](https://github.com/YusukeIwaki/puppeteer-ruby/pull/18))
|
204
230
|
|
205
231
|
### 0.0.18 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.17...0.0.18)]
|
206
232
|
|
207
233
|
New feature
|
208
234
|
|
209
|
-
|
235
|
+
- **Firefox support**
|
210
236
|
|
211
237
|
Bugfix/Improvement
|
212
238
|
|
213
|
-
|
239
|
+
- Allow `Page#keyboard` with block ([#18](https://github.com/YusukeIwaki/puppeteer-ruby/pull/18))
|
data/README.md
CHANGED
@@ -156,6 +156,75 @@ RSpec.describe 'hotel.testplanisphere.dev', type: :feature do
|
|
156
156
|
|
157
157
|
The detailed step of configuration can be found [here](https://github.com/YusukeIwaki/puppeteer-ruby-example/tree/master/_with_capybara-rspec).
|
158
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
|
+
|
159
228
|
## API
|
160
229
|
|
161
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:
|
3
|
-
- puppeteer-ruby version: 0.
|
2
|
+
- Puppeteer version: v11.0.0
|
3
|
+
- puppeteer-ruby version: 0.37.2
|
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~~
|
@@ -81,17 +81,17 @@
|
|
81
81
|
* createPDFStream => `#create_pdf_stream`
|
82
82
|
* deleteCookie => `#delete_cookie`
|
83
83
|
* emulate
|
84
|
-
*
|
84
|
+
* emulateCPUThrottling => `#emulate_cpu_throttling`
|
85
85
|
* emulateIdleState => `#emulate_idle_state`
|
86
86
|
* emulateMediaFeatures => `#emulate_media_features`
|
87
87
|
* emulateMediaType => `#emulate_media_type`
|
88
|
-
*
|
88
|
+
* emulateNetworkConditions => `#emulate_network_conditions`
|
89
89
|
* emulateTimezone => `#emulate_timezone`
|
90
90
|
* emulateVisionDeficiency => `#emulate_vision_deficiency`
|
91
91
|
* evaluate
|
92
92
|
* evaluateHandle => `#evaluate_handle`
|
93
93
|
* evaluateOnNewDocument => `#evaluate_on_new_document`
|
94
|
-
*
|
94
|
+
* exposeFunction => `#expose_function`
|
95
95
|
* focus
|
96
96
|
* frames
|
97
97
|
* goBack => `#go_back`
|
@@ -99,11 +99,11 @@
|
|
99
99
|
* goto
|
100
100
|
* hover
|
101
101
|
* isClosed => `#closed?`
|
102
|
-
*
|
102
|
+
* isDragInterceptionEnabled => `#drag_interception_enabled?`
|
103
103
|
* isJavaScriptEnabled => `#javascript_enabled?`
|
104
104
|
* keyboard
|
105
105
|
* mainFrame => `#main_frame`
|
106
|
-
*
|
106
|
+
* metrics
|
107
107
|
* mouse
|
108
108
|
* pdf
|
109
109
|
* queryObjects => `#query_objects`
|
@@ -134,8 +134,10 @@
|
|
134
134
|
* viewport
|
135
135
|
* ~~waitFor~~
|
136
136
|
* waitForFileChooser => `#wait_for_file_chooser`
|
137
|
+
* ~~waitForFrame~~
|
137
138
|
* waitForFunction => `#wait_for_function`
|
138
139
|
* waitForNavigation => `#wait_for_navigation`
|
140
|
+
* ~~waitForNetworkIdle~~
|
139
141
|
* waitForRequest => `#wait_for_request`
|
140
142
|
* waitForResponse => `#wait_for_response`
|
141
143
|
* waitForSelector => `#wait_for_selector`
|
@@ -166,11 +168,11 @@
|
|
166
168
|
|
167
169
|
* click
|
168
170
|
* down
|
169
|
-
*
|
170
|
-
*
|
171
|
-
*
|
172
|
-
*
|
173
|
-
*
|
171
|
+
* drag
|
172
|
+
* dragAndDrop => `#drag_and_drop`
|
173
|
+
* dragEnter => `#drag_enter`
|
174
|
+
* dragOver => `#drag_over`
|
175
|
+
* drop
|
174
176
|
* move
|
175
177
|
* up
|
176
178
|
* wheel
|
@@ -225,6 +227,7 @@
|
|
225
227
|
* goto
|
226
228
|
* hover
|
227
229
|
* isDetached => `#detached?`
|
230
|
+
* ~~isOOPFrame~~
|
228
231
|
* name
|
229
232
|
* parentFrame => `#parent_frame`
|
230
233
|
* select
|
@@ -272,11 +275,11 @@
|
|
272
275
|
* clickablePoint => `#clickable_point`
|
273
276
|
* contentFrame => `#content_frame`
|
274
277
|
* dispose
|
275
|
-
*
|
276
|
-
*
|
277
|
-
*
|
278
|
-
*
|
279
|
-
*
|
278
|
+
* drag
|
279
|
+
* dragAndDrop => `#drag_and_drop`
|
280
|
+
* dragEnter => `#drag_enter`
|
281
|
+
* dragOver => `#drag_over`
|
282
|
+
* drop
|
280
283
|
* evaluate
|
281
284
|
* evaluateHandle => `#evaluate_handle`
|
282
285
|
* executionContext => `#execution_context`
|
@@ -294,38 +297,44 @@
|
|
294
297
|
* type => `#type_text`
|
295
298
|
* uploadFile => `#upload_file`
|
296
299
|
|
297
|
-
##
|
298
|
-
|
299
|
-
*
|
300
|
-
*
|
301
|
-
*
|
302
|
-
*
|
303
|
-
*
|
304
|
-
*
|
305
|
-
*
|
306
|
-
*
|
307
|
-
*
|
308
|
-
* ~~
|
309
|
-
*
|
310
|
-
*
|
311
|
-
*
|
300
|
+
## HTTPRequest
|
301
|
+
|
302
|
+
* abort
|
303
|
+
* abortErrorReason => `#abort_error_reason`
|
304
|
+
* continue
|
305
|
+
* continueRequestOverrides => `#continue_request_overrides`
|
306
|
+
* enqueueInterceptAction => `#enqueue_intercept_action`
|
307
|
+
* failure
|
308
|
+
* finalizeInterceptions => `#finalize_interceptions`
|
309
|
+
* frame
|
310
|
+
* headers
|
311
|
+
* ~~initiator~~
|
312
|
+
* isNavigationRequest => `#navigation_request?`
|
313
|
+
* method
|
314
|
+
* postData => `#post_data`
|
315
|
+
* redirectChain => `#redirect_chain`
|
316
|
+
* resourceType => `#resource_type`
|
317
|
+
* respond
|
318
|
+
* response
|
319
|
+
* responseForRequest => `#response_for_request`
|
320
|
+
* url
|
312
321
|
|
313
|
-
##
|
322
|
+
## HTTPResponse
|
314
323
|
|
315
|
-
*
|
316
|
-
*
|
324
|
+
* buffer
|
325
|
+
* frame
|
317
326
|
* ~~fromCache~~
|
318
327
|
* ~~fromServiceWorker~~
|
319
|
-
*
|
320
|
-
*
|
328
|
+
* headers
|
329
|
+
* json
|
321
330
|
* ~~ok~~
|
322
|
-
*
|
323
|
-
*
|
324
|
-
*
|
325
|
-
*
|
326
|
-
*
|
327
|
-
*
|
328
|
-
*
|
331
|
+
* remoteAddress => `#remote_address`
|
332
|
+
* request
|
333
|
+
* securityDetails => `#security_details`
|
334
|
+
* status
|
335
|
+
* statusText => `#status_text`
|
336
|
+
* text
|
337
|
+
* url
|
329
338
|
|
330
339
|
## ~~SecurityDetails~~
|
331
340
|
|
@@ -351,6 +360,7 @@
|
|
351
360
|
|
352
361
|
* connection
|
353
362
|
* detach
|
363
|
+
* ~~id~~
|
354
364
|
* send
|
355
365
|
|
356
366
|
## Coverage
|
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
|