capybara-box 0.4.0 → 1.0.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 +15 -2
- data/README.md +32 -42
- data/lib/capybara-box.rb +6 -2
- data/lib/capybara-box/base.rb +43 -98
- data/lib/capybara-box/helper.rb +11 -0
- data/lib/capybara-box/screenshot.rb +41 -0
- data/lib/capybara-box/version.rb +1 -1
- metadata +11 -58
- data/spec/lib/capybara_box/base/add_argument_spec.rb +0 -35
- data/spec/lib/capybara_box/base/add_preference_spec.rb +0 -35
- data/spec/lib/capybara_box/base/apply_arguments_spec.rb +0 -33
- data/spec/lib/capybara_box/base/apply_bin_path_spec.rb +0 -34
- data/spec/lib/capybara_box/base/apply_preferences_spec.rb +0 -43
- data/spec/lib/capybara_box/base/apply_version_spec.rb +0 -37
- data/spec/lib/capybara_box/base/arguments_spec.rb +0 -72
- data/spec/lib/capybara_box/base/chrome_family_spec.rb +0 -23
- data/spec/lib/capybara_box/base/chrome_headless_spec.rb +0 -17
- data/spec/lib/capybara_box/base/chrome_spec.rb +0 -17
- data/spec/lib/capybara_box/base/configure_screenshot_spec.rb +0 -83
- data/spec/lib/capybara_box/base/configure_spec.rb +0 -33
- data/spec/lib/capybara_box/base/create_spec.rb +0 -89
- data/spec/lib/capybara_box/base/driver_options_spec.rb +0 -74
- data/spec/lib/capybara_box/base/driver_spec.rb +0 -97
- data/spec/lib/capybara_box/base/firefox_spec.rb +0 -17
- data/spec/lib/capybara_box/base/http_client_options_spec.rb +0 -24
- data/spec/lib/capybara_box/base/http_client_spec.rb +0 -11
- data/spec/lib/capybara_box/base/log_spec.rb +0 -43
- data/spec/lib/capybara_box/base/options_spec.rb +0 -43
- data/spec/lib/capybara_box/base/preferences_spec.rb +0 -63
- data/spec/lib/capybara_box/base/register_spec.rb +0 -17
- data/spec/lib/capybara_box/base/self_configure_spec.rb +0 -22
- data/spec/lib/capybara_box/base/version_spec.rb +0 -33
- data/spec/rails_helper.rb +0 -9
- data/spec/support/common.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 012a0f0743be254b6cfe3cbb5353ecad6e8abeb00c1498370656c52d26f34d98
|
4
|
+
data.tar.gz: c07e5d764ab4af59c4136ea93c93c10086dee9cf98abc5b202283758b98f89b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 208d41d18d4f3d6a8776717c30ca9471ea1281ea59b3f374b9d40ecfde1cbe1e4cfb9300f0db8ec9ea424fd50ee17d1597587e91b26077bb60f5517101a431c4
|
7
|
+
data.tar.gz: 6172f0ded5edbb4f6ec7aa12ff90fd727859d03fb9ab548c71dfb6fe42a5783d922f8948d8779ab3962bf51905b10cba2d724f683e05b4046be58aa8bfc759f1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## v1.0.0
|
2
|
+
|
3
|
+
- Updates
|
4
|
+
- Updated default arguments;
|
5
|
+
|
6
|
+
- Features
|
7
|
+
- Capybara `load_selenium` is called before startup;
|
8
|
+
- Screenshot S3 feature now is configure only via ENV;
|
9
|
+
- Using new gem `webdrivers`;
|
10
|
+
|
11
|
+
- Fixes
|
12
|
+
- Fix screenshot upload;
|
13
|
+
|
1
14
|
## v0.4.0
|
2
15
|
|
3
16
|
- Updates Selenium WebDriver deprecated message;
|
@@ -9,12 +22,12 @@
|
|
9
22
|
|
10
23
|
## v0.2.1
|
11
24
|
|
12
|
-
-
|
25
|
+
- Fixes
|
13
26
|
- `chrome_headless` was being registered with wrong name.
|
14
27
|
|
15
28
|
## v0.2.0
|
16
29
|
|
17
|
-
-
|
30
|
+
- Features
|
18
31
|
- Add log feature for Chrome and Chrome Headless.
|
19
32
|
|
20
33
|
## v0.1.0
|
data/README.md
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# Capybara Box
|
2
2
|
|
3
|
-
[](https://travis-ci.org/wbotelhos/capybara-box)
|
3
|
+
[](https://travis-ci.org/wbotelhos/capybara-box)
|
4
|
+
[](https://codeclimate.com/github/wbotelhos/capybara-box/maintainability)
|
4
5
|
[](https://badge.fury.io/rb/capybara-box)
|
6
|
+
[](https://www.patreon.com/wbotelhos)
|
5
7
|
|
6
|
-
Configure Capybara with **Chrome**, **Chrome Headless**
|
8
|
+
Configure Capybara with **Chrome**, **Chrome Headless**, **Firefox** and **Firefox Headless** with *Screenshot* feature without losing your mind.
|
7
9
|
|
8
10
|
## install
|
9
11
|
|
@@ -26,44 +28,41 @@ require 'capybara-box'
|
|
26
28
|
CapybaraBox::Base.configure
|
27
29
|
```
|
28
30
|
|
29
|
-
By default, `
|
31
|
+
By default, `selenium_chrome` is the driver, but you can use `selenium_chrome_headless` and `selenium_firefox` or `selenium_firefox_headless` too.
|
30
32
|
|
31
33
|
## Version
|
32
34
|
|
33
|
-
|
35
|
+
The version is setted via `webdrivers`. You can specify the version:
|
34
36
|
|
35
37
|
```ruby
|
36
|
-
CapybaraBox::Base.configure
|
38
|
+
CapybaraBox::Base.configure(version: '83.0.4103.39')
|
37
39
|
```
|
38
40
|
|
39
|
-
* This works just for `chrome` and `chrome_headless`, for now
|
40
|
-
|
41
41
|
## Screenshot
|
42
42
|
|
43
|
-
You can enable screenshot on failure
|
43
|
+
You can enable screenshot on failure:
|
44
44
|
|
45
45
|
```ruby
|
46
|
-
CapybaraBox.configure(
|
47
|
-
screenshot: {
|
48
|
-
s3: {
|
49
|
-
access_key_id: 'KEY',
|
50
|
-
bucket: 'bucket',
|
51
|
-
secret_access_key: 'SECRET'
|
52
|
-
}
|
53
|
-
}
|
54
|
-
)
|
46
|
+
CapybaraBox.configure(screenshot: { enabled: true })
|
55
47
|
```
|
56
48
|
|
57
|
-
If you want
|
49
|
+
If you want to send the screenshot and html page to S3 setup your credentials via ENV:
|
58
50
|
|
59
|
-
```
|
60
|
-
|
61
|
-
|
51
|
+
```sh
|
52
|
+
ENV['CAPYBARA_BOX__S3_BUCKET_NAME']
|
53
|
+
ENV['CAPYBARA_BOX__S3_REGION']
|
54
|
+
ENV['CAPYBARA_BOX__S3_ACCESS_KEY_ID']
|
55
|
+
ENV['CAPYBARA_BOX__S3_SECRET_ACCESS_KEY']
|
56
|
+
```
|
57
|
+
|
58
|
+
And then enable S3 feature:
|
62
59
|
|
63
|
-
|
64
|
-
)
|
60
|
+
```ruby
|
61
|
+
CapybaraBox.configure(screenshot: { enabled: true, s3: true })
|
65
62
|
```
|
66
63
|
|
64
|
+
If you want enable it only on CI, use the `enabled` option:
|
65
|
+
|
67
66
|
## Add Argument
|
68
67
|
|
69
68
|
By default some Switches are enabled for a better performance, you can add yours too:
|
@@ -71,7 +70,7 @@ By default some Switches are enabled for a better performance, you can add yours
|
|
71
70
|
```ruby
|
72
71
|
capybara_box = CapybaraBox.configure
|
73
72
|
|
74
|
-
capybara_box.add_argument
|
73
|
+
capybara_box.add_argument('--incognito')
|
75
74
|
```
|
76
75
|
|
77
76
|
## Arguments
|
@@ -79,7 +78,7 @@ capybara_box.add_argument '--incognito'
|
|
79
78
|
If you prefere, is possible override all of them:
|
80
79
|
|
81
80
|
```ruby
|
82
|
-
CapybaraBox.configure
|
81
|
+
CapybaraBox.configure(arguments: ['--incognito'])
|
83
82
|
```
|
84
83
|
|
85
84
|
Click [here](https://peter.sh/experiments/chromium-command-line-switches) to see the avaiables.
|
@@ -91,7 +90,7 @@ By default some Preferences are enabled for a better performance, you can add yo
|
|
91
90
|
```ruby
|
92
91
|
capybara_box = CapybaraBox.configure
|
93
92
|
|
94
|
-
capybara_box.add_preference
|
93
|
+
capybara_box.add_preference(:credentials_enable_service, false)
|
95
94
|
```
|
96
95
|
|
97
96
|
## Preferences
|
@@ -99,7 +98,7 @@ capybara_box.add_preference :credentials_enable_service, false
|
|
99
98
|
If you prefere, is possible override all of them:
|
100
99
|
|
101
100
|
```ruby
|
102
|
-
CapybaraBox.configure
|
101
|
+
CapybaraBox.configure(preferences: { credentials_enable_service: false })
|
103
102
|
```
|
104
103
|
|
105
104
|
You can check [Chrome](https://sites.google.com/a/chromium.org/chromedriver/home) and [Firefox](http://preferential.mozdev.org/preferences.html).
|
@@ -111,7 +110,7 @@ It has this restrition because with timeout enabled, debugger cannot evaluate th
|
|
111
110
|
You can override all of them too:
|
112
111
|
|
113
112
|
```ruby
|
114
|
-
CapybaraBox.configure
|
113
|
+
CapybaraBox.configure(http_client_options: { read_timeout: 60 })
|
115
114
|
```
|
116
115
|
|
117
116
|
## Driver Options
|
@@ -119,15 +118,18 @@ CapybaraBox.configure http_client_options: { read_timeout: 60 }
|
|
119
118
|
You can override all driver options:
|
120
119
|
|
121
120
|
```ruby
|
122
|
-
CapybaraBox.configure
|
121
|
+
CapybaraBox.configure(driver_options: { clear_local_storage: true })
|
123
122
|
```
|
124
123
|
|
125
124
|
## Log
|
126
125
|
|
127
126
|
Log is writen at `log/capybara-box.log` as default.
|
128
|
-
|
129
127
|
You can see each command executed. Time spent between them and debug some hanging command. :tada:
|
130
128
|
|
129
|
+
```ruby
|
130
|
+
CapybaraBox.configure(log: true)
|
131
|
+
```
|
132
|
+
|
131
133
|
```
|
132
134
|
[15.479][INFO]: RESPONSE Navigate
|
133
135
|
[15.482][INFO]: COMMAND ExecuteScript {
|
@@ -137,15 +139,3 @@ You can see each command executed. Time spent between them and debug some hangin
|
|
137
139
|
[15.483][INFO]: Waiting for pending navigations...
|
138
140
|
[15.545][INFO]: Done waiting for pending navigations. Status: ok
|
139
141
|
```
|
140
|
-
|
141
|
-
To disable log on CI, for example, use the `log` options:
|
142
|
-
|
143
|
-
```ruby
|
144
|
-
CapybaraBox.configure log: ENV['CI'].nil?
|
145
|
-
```
|
146
|
-
|
147
|
-
* It works only for **chrome** and **chrome_headless**.
|
148
|
-
|
149
|
-
## Love it!
|
150
|
-
|
151
|
-
Via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=X8HEP2878NDEG&item_name=capybara-box) or [Gratipay](https://gratipay.com/~wbotelhos). Thanks! (:
|
data/lib/capybara-box.rb
CHANGED
data/lib/capybara-box/base.rb
CHANGED
@@ -1,38 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module CapybaraBox
|
4
|
-
require 'selenium/webdriver'
|
5
|
-
|
6
4
|
class Base
|
7
5
|
def initialize(parameters = {})
|
8
|
-
@browser = parameters
|
6
|
+
@browser = parameters.fetch(:browser) { :selenium_chrome }
|
9
7
|
@max_wait_time = parameters[:max_wait_time]
|
10
8
|
@parameters = parameters
|
11
9
|
end
|
12
10
|
|
13
11
|
def add_argument(value)
|
14
|
-
options
|
12
|
+
options&.add_argument(value)
|
15
13
|
end
|
16
14
|
|
17
15
|
def add_preference(key, value)
|
18
|
-
options
|
16
|
+
options&.add_preference(key, value)
|
19
17
|
end
|
20
18
|
|
21
19
|
def apply_arguments
|
22
|
-
arguments.each { |argument| add_argument
|
20
|
+
arguments.each { |argument| add_argument(argument) }
|
23
21
|
|
24
|
-
add_argument
|
22
|
+
add_argument('--headless') if chrome_headless?
|
25
23
|
end
|
26
24
|
|
27
25
|
def apply_preferences
|
28
|
-
preferences.each { |key, value| add_preference
|
26
|
+
preferences.each { |key, value| add_preference(key, value) }
|
29
27
|
end
|
30
28
|
|
31
29
|
def apply_version(version)
|
32
30
|
if chrome_family?
|
33
|
-
|
34
|
-
|
35
|
-
::
|
31
|
+
Webdrivers::Chromedriver.required_version = version
|
32
|
+
else
|
33
|
+
Webdrivers::Geckodriver.required_version = version
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
@@ -50,6 +48,7 @@ module CapybaraBox
|
|
50
48
|
--disable-password-separated-signin-flow
|
51
49
|
--disable-popup-blocking
|
52
50
|
--disable-save-password-bubble
|
51
|
+
--disable-site-isolation-trials
|
53
52
|
--disable-translate
|
54
53
|
--incognito
|
55
54
|
--mute-audio
|
@@ -59,7 +58,7 @@ module CapybaraBox
|
|
59
58
|
end
|
60
59
|
|
61
60
|
def chrome?
|
62
|
-
@browser == :
|
61
|
+
@browser == :selenium_chrome
|
63
62
|
end
|
64
63
|
|
65
64
|
def chrome_family?
|
@@ -67,41 +66,19 @@ module CapybaraBox
|
|
67
66
|
end
|
68
67
|
|
69
68
|
def chrome_headless?
|
70
|
-
@browser == :
|
69
|
+
@browser == :selenium_chrome_headless
|
71
70
|
end
|
72
71
|
|
73
|
-
def
|
72
|
+
def configure_capybara
|
74
73
|
Capybara.javascript_driver = @browser
|
75
74
|
Capybara.default_max_wait_time = @max_wait_time if @max_wait_time
|
76
75
|
end
|
77
76
|
|
78
77
|
def apply_bin_path(path)
|
79
78
|
if firefox?
|
80
|
-
Selenium::WebDriver::Firefox::Binary.path = path
|
79
|
+
::Selenium::WebDriver::Firefox::Binary.path = path
|
81
80
|
|
82
|
-
Selenium::WebDriver::Firefox::Binary.path
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def configure_screenshot
|
87
|
-
return false if @parameters[:screenshot].key?(:enabled) && !true?(@parameters[:screenshot][:enabled])
|
88
|
-
|
89
|
-
require 'capybara-screenshot/rspec'
|
90
|
-
|
91
|
-
Capybara::Screenshot.append_timestamp = false
|
92
|
-
Capybara::Screenshot.prune_strategy = :keep_last_run
|
93
|
-
Capybara::Screenshot::RSpec.add_link_to_screenshot_for_failed_examples = false
|
94
|
-
|
95
|
-
Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example|
|
96
|
-
example.full_description.downcase.gsub('#', '--').tr ' ', '-'
|
97
|
-
end
|
98
|
-
|
99
|
-
if @parameters[:screenshot][:s3]
|
100
|
-
Capybara::Screenshot.s3_configuration = screenshot_s3_config
|
101
|
-
end
|
102
|
-
|
103
|
-
Capybara::Screenshot.register_driver(@browser) do |driver, path|
|
104
|
-
driver.browser.save_screenshot path
|
81
|
+
::Selenium::WebDriver::Firefox::Binary.path
|
105
82
|
end
|
106
83
|
end
|
107
84
|
|
@@ -109,39 +86,40 @@ module CapybaraBox
|
|
109
86
|
apply_arguments
|
110
87
|
apply_preferences
|
111
88
|
|
112
|
-
apply_bin_path
|
113
|
-
apply_version
|
114
|
-
|
89
|
+
apply_bin_path(@parameters[:bin_path]) if @parameters[:bin_path]
|
90
|
+
apply_version(@parameters[:version]) if !!@parameters[:version]
|
91
|
+
|
92
|
+
::CapybaraBox::Screenshot.configure(@parameters[:screenshot], @browser) if @parameters[:screenshot]
|
115
93
|
|
116
|
-
register
|
94
|
+
register(@browser)
|
117
95
|
|
118
|
-
|
96
|
+
configure_capybara
|
119
97
|
end
|
120
98
|
|
121
99
|
def driver(app)
|
122
|
-
opts
|
123
|
-
opts[:options]
|
124
|
-
opts[:http_client] = http_client if true?(ENV['CI'])
|
100
|
+
opts = {}
|
101
|
+
opts[:options] = options if chrome_family?
|
125
102
|
|
126
|
-
Capybara::Selenium::Driver.
|
103
|
+
Capybara::Selenium::Driver.load_selenium
|
104
|
+
|
105
|
+
opts[:http_client] = http_client if ::CapybaraBox::Helper.true?(ENV['CI'])
|
106
|
+
|
107
|
+
Capybara::Selenium::Driver.new(app, opts.merge(driver_options))
|
127
108
|
end
|
128
109
|
|
129
110
|
def driver_options
|
130
111
|
return @parameters[:driver_options] if @parameters[:driver_options]
|
131
112
|
|
132
113
|
opts = {
|
133
|
-
browser:
|
134
|
-
clear_local_storage:
|
135
|
-
clear_session_storage: true
|
114
|
+
browser: chrome_family? ? :chrome : @browser,
|
115
|
+
clear_local_storage: true,
|
116
|
+
clear_session_storage: true,
|
136
117
|
}
|
137
118
|
|
138
|
-
if log?
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
verbose: true,
|
143
|
-
})
|
144
|
-
end
|
119
|
+
if log? && chrome_family?
|
120
|
+
opts[:service] = ::Selenium::WebDriver::Service.chrome(
|
121
|
+
args: { log_path: 'log/capybara-box.log', verbose: true }
|
122
|
+
)
|
145
123
|
end
|
146
124
|
|
147
125
|
opts
|
@@ -156,16 +134,16 @@ module CapybaraBox
|
|
156
134
|
|
157
135
|
{
|
158
136
|
open_timeout: nil,
|
159
|
-
read_timeout: 120
|
137
|
+
read_timeout: 120,
|
160
138
|
}
|
161
139
|
end
|
162
140
|
|
163
141
|
def http_client
|
164
|
-
@http_client ||= Selenium::WebDriver::Remote::Http::Default.new(http_client_options)
|
142
|
+
@http_client ||= ::Selenium::WebDriver::Remote::Http::Default.new(**http_client_options)
|
165
143
|
end
|
166
144
|
|
167
145
|
def options
|
168
|
-
@options ||= Selenium::WebDriver::Chrome::Options.new if chrome_family?
|
146
|
+
@options ||= ::Selenium::WebDriver::Chrome::Options.new if chrome_family?
|
169
147
|
end
|
170
148
|
|
171
149
|
def preferences
|
@@ -176,31 +154,17 @@ module CapybaraBox
|
|
176
154
|
credentials_enable_service: false,
|
177
155
|
|
178
156
|
profile: {
|
179
|
-
password_manager_enabled: false
|
180
|
-
}
|
157
|
+
password_manager_enabled: false,
|
158
|
+
},
|
181
159
|
}
|
182
160
|
end
|
183
161
|
|
184
162
|
def register(name)
|
185
|
-
Capybara.register_driver
|
186
|
-
driver app
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def version
|
191
|
-
if chrome_family?
|
192
|
-
require 'chromedriver/helper'
|
193
|
-
|
194
|
-
::Chromedriver::Helper.new.current_version
|
195
|
-
end
|
163
|
+
Capybara.register_driver(name) { |app| driver(app) }
|
196
164
|
end
|
197
165
|
|
198
166
|
def self.configure(parameters)
|
199
|
-
|
200
|
-
|
201
|
-
box.create
|
202
|
-
|
203
|
-
box
|
167
|
+
new(parameters).tap(&:create)
|
204
168
|
end
|
205
169
|
|
206
170
|
private
|
@@ -208,26 +172,7 @@ module CapybaraBox
|
|
208
172
|
def log?
|
209
173
|
return true if @parameters[:log].nil?
|
210
174
|
|
211
|
-
true?
|
212
|
-
end
|
213
|
-
|
214
|
-
def true?(value)
|
215
|
-
['true', true].include? value
|
216
|
-
end
|
217
|
-
|
218
|
-
def screenshot_s3_config
|
219
|
-
{
|
220
|
-
s3_client_credentials: {
|
221
|
-
access_key_id: @parameters[:screenshot][:s3][:access_key_id],
|
222
|
-
secret_access_key: @parameters[:screenshot][:s3][:secret_access_key]
|
223
|
-
},
|
224
|
-
|
225
|
-
bucket_name: @parameters[:screenshot][:s3][:bucket]
|
226
|
-
}
|
227
|
-
end
|
228
|
-
|
229
|
-
def version?
|
230
|
-
!!@parameters[:version]
|
175
|
+
::CapybaraBox::Helper.true?(@parameters[:log])
|
231
176
|
end
|
232
177
|
end
|
233
178
|
end
|