isomorfeus-puppetmaster 0.3.5 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -9
- data/lib/isomorfeus/puppetmaster/document.rb +13 -10
- data/lib/isomorfeus/puppetmaster/driver/puppeteer.rb +5 -4
- data/lib/isomorfeus/puppetmaster/driver_registration.rb +2 -4
- data/lib/isomorfeus/puppetmaster/self_forwardable.rb +8 -0
- data/lib/isomorfeus/puppetmaster/version.rb +1 -1
- metadata +29 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d453a12b9cc8f801e1e81fdda6e615d7d256253eec19b60c7c969c8bf08bd72
|
4
|
+
data.tar.gz: cbef053148c753b2b03c6b15e1bb815af51dfdc7821a10d422c803862ac57dcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42dd469ad600d330aa8904a31d638c8915bd6f49aba4990ff76c3bc92886d662f08d483128be27ffc6fdb4cf136a552b6f9a648c4609c1f4e50a0a61fa664ca8
|
7
|
+
data.tar.gz: 5dc01c153258ca15823abaa9ad535869cebc5aced2b5e5af6c1346b64b73a4666b68969320e06a589ce9b0064e8b1889657da5742e3f39699d2505798a7865e3
|
data/README.md
CHANGED
@@ -19,9 +19,7 @@ In Gemfile:
|
|
19
19
|
|
20
20
|
Also requires the following npm modules with recommended versions:
|
21
21
|
|
22
|
-
- [puppeteer
|
23
|
-
- [jsdom 15.2.1](https://github.com/jsdom/jsdom#readme) - for the jsdom driver
|
24
|
-
- [canvas 2.6.0](https://github.com/Automattic/node-canvas) - for the jsdom driver (optional)
|
22
|
+
- [puppeteer 9.1.x](https://github.com/GoogleChrome/puppeteer#readme) - for the chromium driver
|
25
23
|
|
26
24
|
Simply install them in your projects root. Puppetmaster also depends on isomorfeus-speednode, which will be installed automatically.
|
27
25
|
Speednode will pickup the node modules then from the projects root node_modules directory.
|
@@ -30,15 +28,11 @@ Speednode will pickup the node modules then from the projects root node_modules
|
|
30
28
|
|
31
29
|
Puppetmaster provides these drivers:
|
32
30
|
- chromium - a real browser, headless, fast
|
33
|
-
- chromium_wsl - as above but with options so it can execute within the Windows Linux WSL
|
34
31
|
- chromium_debug - opens a chromium browser window with devtools enabled, useful for debugging tests
|
35
|
-
- jsdom - provides a dom implementation in javascript, can execute javascript in the document, super fast, headless, has certain limitations,
|
36
|
-
especially because its not rendering anything (no element bounding box, etc.)
|
37
|
-
- jsdom_canvas - jsdom driver with additional support for 'canvas', requires certain libraries to be installed, see: [canvas at github](https://github.com/Automattic/node-canvas)
|
38
32
|
|
39
|
-
Chromium is the default driver. Selecting another driver, for example
|
33
|
+
Chromium is the default driver. Selecting another driver, for example firefox:
|
40
34
|
```ruby
|
41
|
-
Isomorfeus::Puppetmaster.driver = :
|
35
|
+
Isomorfeus::Puppetmaster.driver = :chromium_debug
|
42
36
|
```
|
43
37
|
|
44
38
|
Puppetmaster provides support for these rack servers:
|
@@ -15,7 +15,6 @@ module Isomorfeus
|
|
15
15
|
clear_cookies
|
16
16
|
clear_extra_headers
|
17
17
|
clear_url_blacklist
|
18
|
-
click
|
19
18
|
close
|
20
19
|
cookies
|
21
20
|
console
|
@@ -34,15 +33,11 @@ module Isomorfeus
|
|
34
33
|
html
|
35
34
|
open_new_document
|
36
35
|
remove_cookie
|
37
|
-
render_base64
|
38
36
|
reset_user_agent
|
39
37
|
right_click
|
40
|
-
save_pdf
|
41
|
-
save_screenshot
|
42
38
|
scroll_by
|
43
39
|
scroll_to
|
44
40
|
set_authentication_credentials
|
45
|
-
set_cookie
|
46
41
|
set_extra_headers
|
47
42
|
set_url_blacklist
|
48
43
|
set_user_agent
|
@@ -56,6 +51,14 @@ module Isomorfeus
|
|
56
51
|
wait_for_xpath
|
57
52
|
]
|
58
53
|
|
54
|
+
document_forward_kwargs %i[
|
55
|
+
click
|
56
|
+
render_base64
|
57
|
+
save_pdf
|
58
|
+
save_screenshot
|
59
|
+
set_cookie
|
60
|
+
]
|
61
|
+
|
59
62
|
attr_reader :handle, :response
|
60
63
|
|
61
64
|
def initialize(driver, handle, response)
|
@@ -175,11 +178,11 @@ module Isomorfeus
|
|
175
178
|
alias_method :visit, :goto
|
176
179
|
|
177
180
|
def has_content?(content, **options)
|
178
|
-
body.has_content?(content, options)
|
181
|
+
body.has_content?(content, **options)
|
179
182
|
end
|
180
183
|
|
181
184
|
def has_css?(selector, **options)
|
182
|
-
body.has_css?(selector, options)
|
185
|
+
body.has_css?(selector, **options)
|
183
186
|
end
|
184
187
|
|
185
188
|
def has_current_path?(other_path)
|
@@ -187,11 +190,11 @@ module Isomorfeus
|
|
187
190
|
end
|
188
191
|
|
189
192
|
def has_text?(text, **options)
|
190
|
-
body.has_text?(text, options)
|
193
|
+
body.has_text?(text, **options)
|
191
194
|
end
|
192
195
|
|
193
196
|
def has_xpath?(query, **options)
|
194
|
-
body.has_xpath?(query, options)
|
197
|
+
body.has_xpath?(query, **options)
|
195
198
|
end
|
196
199
|
|
197
200
|
def isomorphic(ruby_source = '', &block)
|
@@ -260,7 +263,7 @@ module Isomorfeus
|
|
260
263
|
protected
|
261
264
|
|
262
265
|
def compile_ruby_source(source_code)
|
263
|
-
# TODO maybe use compile server
|
266
|
+
# TODO maybe use compile server, which can cache code
|
264
267
|
Opal.compile(source_code, parse_comments: false)
|
265
268
|
end
|
266
269
|
end
|
@@ -36,10 +36,11 @@ module Isomorfeus
|
|
36
36
|
|
37
37
|
def initialize(options = {})
|
38
38
|
# https://pptr.dev/#?product=Puppeteer&version=v1.12.2&show=api-puppeteerlaunchoptions
|
39
|
-
# init
|
39
|
+
# init ExecJS context
|
40
40
|
@app = options.delete(:app)
|
41
41
|
@options = options.dup
|
42
42
|
@browser_type = @options.delete(:browser_type) { :chromium }
|
43
|
+
@options[:product] = "'#{@browser_type}'" unless @options.key?(:product)
|
43
44
|
@max_width = @options.delete(:max_width) { VIEWPORT_MAX_WIDTH }
|
44
45
|
@max_height = @options.delete(:max_height) { VIEWPORT_MAX_HEIGHT }
|
45
46
|
@width = @options.delete(:width) { VIEWPORT_DEFAULT_WIDTH > @max_width ? @max_width : VIEWPORT_DEFAULT_WIDTH }
|
@@ -218,7 +219,7 @@ module Isomorfeus
|
|
218
219
|
get_result
|
219
220
|
end
|
220
221
|
|
221
|
-
def
|
222
|
+
def default_require
|
222
223
|
<<~JAVASCRIPT
|
223
224
|
const MasterPuppeteer = require('puppeteer');
|
224
225
|
JAVASCRIPT
|
@@ -277,8 +278,8 @@ module Isomorfeus
|
|
277
278
|
def puppeteer_launch
|
278
279
|
# todo target_handle, puppeteer save path
|
279
280
|
puppeteer_require = case @browser_type
|
280
|
-
when :chrome then
|
281
|
-
when :chromium then
|
281
|
+
when :chrome then default_require
|
282
|
+
when :chromium then default_require
|
282
283
|
else
|
283
284
|
raise "Browser type #{@browser_type} not supported!"
|
284
285
|
end
|
@@ -1,11 +1,9 @@
|
|
1
|
+
require 'tty-which'
|
2
|
+
|
1
3
|
Isomorfeus::Puppetmaster.register_driver(:chromium) do |app|
|
2
4
|
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: true, app: app)
|
3
5
|
end
|
4
6
|
|
5
|
-
Isomorfeus::Puppetmaster.register_driver(:chromium_wsl) do |app|
|
6
|
-
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: true, app: app, args: ['--no-sandbox'])
|
7
|
-
end
|
8
|
-
|
9
7
|
Isomorfeus::Puppetmaster.register_driver(:chromium_debug) do |app|
|
10
8
|
Isomorfeus::Puppetmaster::Driver::Puppeteer.new(browser_type: :chromium, headless: false, devtools: true, app: app)
|
11
9
|
end
|
@@ -10,6 +10,14 @@ module Isomorfeus
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
base.define_singleton_method(:document_forward_kwargs) do |methods|
|
14
|
+
methods.each do |method|
|
15
|
+
define_method(method) do |*args, **kwargs, &block|
|
16
|
+
@driver.send("document_#{method}", self, *args, **kwargs, &block)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
13
21
|
base.define_singleton_method(:frame_forward) do |methods|
|
14
22
|
methods.each do |method|
|
15
23
|
define_method(method) do |*args|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-puppetmaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.3.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.3.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: method_source
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.11.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.11.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: opal
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: tty-which
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,19 +123,19 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: unparser
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
132
|
-
type: :
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: chunky_png
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,14 +156,14 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
159
|
+
version: 0.38.0
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
166
|
+
version: 0.38.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: fastimage
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,20 +178,6 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: iodine
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: 0.7.38
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - "~>"
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: 0.7.38
|
195
181
|
- !ruby/object:Gem::Dependency
|
196
182
|
name: irb
|
197
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,28 +198,28 @@ dependencies:
|
|
212
198
|
requirements:
|
213
199
|
- - "~>"
|
214
200
|
- !ruby/object:Gem::Version
|
215
|
-
version: '2.
|
201
|
+
version: '2.5'
|
216
202
|
type: :development
|
217
203
|
prerelease: false
|
218
204
|
version_requirements: !ruby/object:Gem::Requirement
|
219
205
|
requirements:
|
220
206
|
- - "~>"
|
221
207
|
- !ruby/object:Gem::Version
|
222
|
-
version: '2.
|
208
|
+
version: '2.5'
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
210
|
name: nokogiri
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
213
|
- - "~>"
|
228
214
|
- !ruby/object:Gem::Version
|
229
|
-
version: 1.
|
215
|
+
version: 1.11.0
|
230
216
|
type: :development
|
231
217
|
prerelease: false
|
232
218
|
version_requirements: !ruby/object:Gem::Requirement
|
233
219
|
requirements:
|
234
220
|
- - "~>"
|
235
221
|
- !ruby/object:Gem::Version
|
236
|
-
version: 1.
|
222
|
+
version: 1.11.0
|
237
223
|
- !ruby/object:Gem::Dependency
|
238
224
|
name: os
|
239
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,28 +240,28 @@ dependencies:
|
|
254
240
|
requirements:
|
255
241
|
- - ">="
|
256
242
|
- !ruby/object:Gem::Version
|
257
|
-
version:
|
243
|
+
version: 2.4.0
|
258
244
|
type: :development
|
259
245
|
prerelease: false
|
260
246
|
version_requirements: !ruby/object:Gem::Requirement
|
261
247
|
requirements:
|
262
248
|
- - ">="
|
263
249
|
- !ruby/object:Gem::Version
|
264
|
-
version:
|
250
|
+
version: 2.4.0
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
252
|
name: puma
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
268
254
|
requirements:
|
269
255
|
- - "~>"
|
270
256
|
- !ruby/object:Gem::Version
|
271
|
-
version:
|
257
|
+
version: 5.3.0
|
272
258
|
type: :development
|
273
259
|
prerelease: false
|
274
260
|
version_requirements: !ruby/object:Gem::Requirement
|
275
261
|
requirements:
|
276
262
|
- - "~>"
|
277
263
|
- !ruby/object:Gem::Version
|
278
|
-
version:
|
264
|
+
version: 5.3.0
|
279
265
|
- !ruby/object:Gem::Dependency
|
280
266
|
name: rake
|
281
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -310,14 +296,14 @@ dependencies:
|
|
310
296
|
requirements:
|
311
297
|
- - "~>"
|
312
298
|
- !ruby/object:Gem::Version
|
313
|
-
version:
|
299
|
+
version: 2.1.0
|
314
300
|
type: :development
|
315
301
|
prerelease: false
|
316
302
|
version_requirements: !ruby/object:Gem::Requirement
|
317
303
|
requirements:
|
318
304
|
- - "~>"
|
319
305
|
- !ruby/object:Gem::Version
|
320
|
-
version:
|
306
|
+
version: 2.1.0
|
321
307
|
description: Acceptance testing for isomorfeus.
|
322
308
|
email: jan@kursator.de
|
323
309
|
executables: []
|
@@ -372,7 +358,7 @@ licenses:
|
|
372
358
|
- MIT
|
373
359
|
metadata:
|
374
360
|
github_repo: ssh://github.com/isomorfeus/gems
|
375
|
-
post_install_message:
|
361
|
+
post_install_message:
|
376
362
|
rdoc_options: []
|
377
363
|
require_paths:
|
378
364
|
- lib
|
@@ -387,8 +373,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
387
373
|
- !ruby/object:Gem::Version
|
388
374
|
version: '0'
|
389
375
|
requirements: []
|
390
|
-
rubygems_version: 3.
|
391
|
-
signing_key:
|
376
|
+
rubygems_version: 3.2.15
|
377
|
+
signing_key:
|
392
378
|
specification_version: 4
|
393
379
|
summary: Acceptance testing for isomorfeus.
|
394
380
|
test_files: []
|