isomorfeus-puppetmaster 0.6.12 → 0.6.15
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 269dd1f6465a3861c8590f471d3db376b11a0570fa4bf97bd44b9dfb5d9c1e42
|
4
|
+
data.tar.gz: 0315a46480c8e60a185b5ad3e8fd5649eecb937cb9c606ac6e3ab2e70e57a454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d52eb1625c95027d9ef3d7b3f57c7742d07307bf650f7b7545ef222bb6b4135500229670bf95dfc5e2081a41f623536d005cf5fcf392c887c03e7b4c7c75c263
|
7
|
+
data.tar.gz: c1af261f57a1f1ad3cce47a7cb2b10ad8c3b539300d98e925918db666231de4f72d8c5b606de64089af02cf79f3296596efbcce60a909702dc2a63808a77e8b1
|
data/README.md
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
<br/>
|
4
4
|
Isomorfeus Puppetmaster<br/>
|
5
5
|
</h1>
|
6
|
+
|
6
7
|
A framework for acceptance tests or simply running tests in a headless browser.
|
7
8
|
Allows for writing javascript browser tests in pure ruby.
|
8
|
-
It is tailored for Isomorfeus and using [puppeteer-ruby](https://github.com/YusukeIwaki/puppeteer-ruby)
|
9
|
+
It is tailored for Isomorfeus and using [puppeteer-ruby](https://github.com/YusukeIwaki/puppeteer-ruby)
|
9
10
|
|
10
11
|
### Community and Support
|
11
12
|
At the [Isomorfeus Framework Project](https://isomorfeus.com)
|
@@ -52,6 +53,16 @@ A document consists of elements. Simply working with just pages, documents and e
|
|
52
53
|
1. Find something
|
53
54
|
2. Interact with it
|
54
55
|
|
56
|
+
## Sessions
|
57
|
+
Using `visit` will open a default session. However, additional browser sessions may be opened with:
|
58
|
+
```ruby
|
59
|
+
s = new_session() # additional args may be passed, like headless: false, devtools: true
|
60
|
+
# now the session can be interacted with:
|
61
|
+
s.visit('/')
|
62
|
+
t = new_session() # multiple sessions may be active at the same time
|
63
|
+
t.visit('/')
|
64
|
+
```
|
65
|
+
|
55
66
|
## Pages
|
56
67
|
A page is a Puppeteer::Page and provides its complete API plus some additional convenience methods.
|
57
68
|
The drivers opens a empty default page, to use that and go to the apps root page:
|
@@ -75,6 +86,13 @@ Both open pages can then be independently interacted with:
|
|
75
86
|
page.visit('/go')
|
76
87
|
page2.goto('/location')
|
77
88
|
```
|
89
|
+
|
90
|
+
For debugging:
|
91
|
+
```ruby
|
92
|
+
page = visit('/', headless: false, devtools: true)
|
93
|
+
```
|
94
|
+
This will close the current browser if the options for headless and devtools dont match, and open a new one with the supplied headless and devtools options.
|
95
|
+
|
78
96
|
### Pages and Ruby
|
79
97
|
|
80
98
|
Ruby can be executed within pages by simply providing a block or a string:
|
@@ -3,7 +3,7 @@ module Isomorfeus
|
|
3
3
|
module DSL
|
4
4
|
@@launch_options = nil
|
5
5
|
|
6
|
-
def set_launch_options(app: nil, args: nil, channel: nil, default_viewport: nil, devtools:
|
6
|
+
def set_launch_options(app: nil, args: nil, channel: nil, default_viewport: nil, devtools: false, dumpio: nil,
|
7
7
|
env: nil, executable_path: nil, handle_SIGINT: nil, handle_SIGTERM: nil, handle_SIGHUP: nil,
|
8
8
|
headless: true, ignore_default_args: nil, ignore_https_errors: nil, pipe: nil,
|
9
9
|
product: :chrome, slow_mo: nil, timeout: nil, user_data_dir: nil)
|
@@ -34,11 +34,11 @@ module Isomorfeus
|
|
34
34
|
session.default_page
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
session.
|
37
|
+
def visit(uri, referer: nil, timeout: nil, wait_until: 'networkidle0', headless: true, devtools: false)
|
38
|
+
session(headless: headless, devtools: devtools).visit(uri, referer: referer, timeout: timeout, wait_until: wait_until, headless: headless, devtools: devtools)
|
39
39
|
session.default_page
|
40
40
|
end
|
41
|
-
alias_method :
|
41
|
+
alias_method :goto, :visit
|
42
42
|
|
43
43
|
def isomorphic(ruby_source = '', &block)
|
44
44
|
ruby_source = Isomorfeus::Puppetmaster.block_source_code(&block) if block_given?
|
@@ -56,7 +56,7 @@ module Isomorfeus
|
|
56
56
|
Isomorfeus::Puppetmaster.served_app.on_server(ruby_source, &block)
|
57
57
|
end
|
58
58
|
|
59
|
-
def new_session(app: nil, args: nil, channel: nil, default_viewport: nil, devtools:
|
59
|
+
def new_session(app: nil, args: nil, channel: nil, default_viewport: nil, devtools: false, dumpio: nil,
|
60
60
|
env: nil, executable_path: nil, handle_SIGINT: nil, handle_SIGTERM: nil, handle_SIGHUP: nil,
|
61
61
|
headless: true, ignore_default_args: nil, ignore_https_errors: nil, pipe: nil,
|
62
62
|
product: :chrome, slow_mo: nil, timeout: nil, user_data_dir: nil)
|
@@ -109,8 +109,8 @@ module Isomorfeus
|
|
109
109
|
Isomorfeus::Puppetmaster.served_app.on_server(ruby_source)
|
110
110
|
end
|
111
111
|
|
112
|
-
def session
|
113
|
-
@@puppetmaster_session ||= new_session(app: Isomorfeus::Puppetmaster.served_app)
|
112
|
+
def session(headless: true, devtools: false)
|
113
|
+
@@puppetmaster_session ||= new_session(app: Isomorfeus::Puppetmaster.served_app, headless: headless, devtools: devtools)
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -18,17 +18,22 @@ module Isomorfeus
|
|
18
18
|
unless request.body.nil?
|
19
19
|
request_hash = Oj.load(request.body.read, mode: :strict)
|
20
20
|
if request_hash['key'] != @@request_key
|
21
|
+
STDERR.puts "wrong key"
|
21
22
|
response = Rack::Response.new(Oj.dump({ 'error' => 'wrong key given, execution denied' }),
|
22
23
|
401,
|
23
24
|
'Content-Type' => 'application/json')
|
24
25
|
else
|
25
26
|
begin
|
27
|
+
if Isomorfeus.respond_to?(:init_store)
|
28
|
+
Isomorfeus.init_store
|
29
|
+
Isomorfeus.store.clear! if Isomorfeus.store.respond_to?(:clear!)
|
30
|
+
end
|
26
31
|
result = TOPLEVEL_BINDING.eval(request_hash['code']) if request_hash['code']
|
27
32
|
response = Rack::Response.new(Oj.dump({ 'result' => result }),
|
28
33
|
200,
|
29
34
|
'Content-Type' => 'application/json')
|
30
35
|
rescue Exception => e
|
31
|
-
response = Rack::Response.new(Oj.dump({ 'error' => "#{e.class}: #{e.message}", 'backtrace' => e.backtrace
|
36
|
+
response = Rack::Response.new(Oj.dump({ 'error' => "#{e.class}: #{e.message}", 'backtrace' => e.backtrace&.join("\n") }),
|
32
37
|
200,
|
33
38
|
'Content-Type' => 'application/json')
|
34
39
|
end
|
@@ -4,23 +4,24 @@ module Isomorfeus
|
|
4
4
|
TIMEOUT = 30000 # milliseconds
|
5
5
|
|
6
6
|
attr_accessor :app, :browser, :default_page, :product, :response
|
7
|
+
attr_reader :headless, :devtools
|
7
8
|
|
8
|
-
def initialize(app:, args: nil, channel: nil, default_viewport: nil, devtools:
|
9
|
+
def initialize(app:, args: nil, channel: nil, default_viewport: nil, devtools: false, dumpio: nil,
|
9
10
|
env: nil, executable_path: nil, handle_SIGINT: nil, handle_SIGTERM: nil, handle_SIGHUP: nil,
|
10
11
|
headless: true, ignore_default_args: nil, ignore_https_errors: nil, pipe: nil,
|
11
12
|
product: :chrome, slow_mo: nil, timeout: nil, user_data_dir: nil)
|
12
|
-
@
|
13
|
+
@parameters = binding.local_variables.map { |v| [v, binding.local_variable_get(v)] }.to_h
|
14
|
+
@parameters[:channel] = @parameters[:channel].to_s if channel
|
15
|
+
@parameters[:timeout] = TIMEOUT unless timeout
|
16
|
+
@app = @parameters.delete(:app)
|
17
|
+
@headless = headless
|
18
|
+
@devtools = devtools
|
19
|
+
@channel = channel
|
20
|
+
default_viewport
|
13
21
|
product = product.to_s
|
14
|
-
@product = %w[chrome firefox].include?(product) ? product : 'chrome'
|
15
|
-
@
|
16
|
-
|
17
|
-
handle_SIGTERM: handle_SIGTERM, handle_SIGHUP: handle_SIGHUP, headless: headless,
|
18
|
-
ignore_default_args: ignore_default_args, ignore_https_errors: ignore_https_errors,
|
19
|
-
pipe: pipe, product: product, slow_mo: slow_mo, timeout: timeout ? timeout : TIMEOUT,
|
20
|
-
user_data_dir: user_data_dir)
|
21
|
-
@original_user_agent = @browser.user_agent
|
22
|
-
@default_page = @browser.new_page
|
23
|
-
@default_page.puppetmaster_session = self
|
22
|
+
@parameters[:product] = %w[chrome firefox].include?(product) ? product : 'chrome'
|
23
|
+
@product = @parameters[:product]
|
24
|
+
launch_browser
|
24
25
|
ObjectSpace.define_finalizer(self, self.class.close_browser(self))
|
25
26
|
end
|
26
27
|
|
@@ -40,12 +41,18 @@ module Isomorfeus
|
|
40
41
|
@browser.pages
|
41
42
|
end
|
42
43
|
|
43
|
-
def
|
44
|
+
def visit(uri, referer: nil, timeout: nil, wait_until: 'networkidle0', headless: true, devtools: false)
|
45
|
+
if @headless != headless || @devtools != devtools
|
46
|
+
@browser.close
|
47
|
+
@headless = headless
|
48
|
+
@devtools = devtools
|
49
|
+
launch_browser
|
50
|
+
end
|
44
51
|
parsed_uri = parse_uri(uri)
|
45
52
|
@response = @default_page.goto(parsed_uri.to_s, referer: referer, timeout: timeout, wait_until: wait_until)
|
46
53
|
@default_page
|
47
54
|
end
|
48
|
-
alias_method :
|
55
|
+
alias_method :goto, :visit
|
49
56
|
|
50
57
|
def network_conditions
|
51
58
|
::Puppeteer::NETWORK_CONDITIONS
|
@@ -144,6 +151,15 @@ module Isomorfeus
|
|
144
151
|
instance.browser.close if instance.browser
|
145
152
|
end
|
146
153
|
end
|
154
|
+
|
155
|
+
def launch_browser
|
156
|
+
@parameters[:headless] = @headless
|
157
|
+
@parameters[:devtools] = @devtools
|
158
|
+
@browser = ::Puppeteer.launch(**@parameters)
|
159
|
+
@original_user_agent = @browser.user_agent
|
160
|
+
@default_page = @browser.new_page
|
161
|
+
@default_page.puppetmaster_session = self
|
162
|
+
end
|
147
163
|
end
|
148
164
|
end
|
149
165
|
end
|
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.6.
|
4
|
+
version: 0.6.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|