puppeteer-ruby 0.34.3 → 0.37.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|