dvla-browser-drivers 2.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ded8210272d81162b05c9b4fd5f6f47fb6dd17f7c668b3d2415435499b3326ed
4
+ data.tar.gz: 3b642d367f46e22fc3b05dd9480a47c811608f08aa0d8f9bc2cb1b06b5a46d70
5
+ SHA512:
6
+ metadata.gz: b0fdb8305b590e7523605a25d90bfa66ecea8653da35dcc43c52a75788c92707a4fff47480686cdb98783e811852ff736833eb0d95b07ed6a1f5d818cb34a15d
7
+ data.tar.gz: bb18727288978ce41b9ea0ba0a084e143bb13e8499febeb87893701f7d29bf16ae398e71331081ffd6b911fb20356fc1a2c0f5d8dfae0e454f3e5eb49eec4359
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.0
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in dvla-browser-drivers.gemspec
6
+ gemspec
data/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # DVLA::Browser::Drivers
2
+
3
+ DVLA-Browser-Drivers is a gem that has pre-configured browser drivers that you can use out-of-the-box for the
4
+ development of your application.
5
+
6
+ ## Installation
7
+
8
+ ```ruby
9
+ source 'https://gemstash.tooling.dvla.gov.uk/private' do
10
+ gem 'dvla-browser-drivers'
11
+ end
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle install
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install dvla-browser-drivers -s https://gemstash.tooling.dvla.gov.uk/private
21
+
22
+ ## Usage
23
+
24
+ Once installed, you are able to use any pre-configured browser driver from the list below:
25
+
26
+ ### Selenium drivers
27
+
28
+ | Driver | Usage |
29
+ |------------------|-------------------------------------------|
30
+ | chrome | `DVLA::Browser::Drivers.chrome` |
31
+ | headless_chrome | `DVLA::Browser::Drivers.headless_chrome` |
32
+ | edge | `DVLA::Browser::Drivers.edge` |
33
+ | headless_edge | `DVLA::Browser::Drivers.headless_edge` |
34
+ | firefox | `DVLA::Browser::Drivers.firefox` |
35
+ | headless_firefox | `DVLA::Browser::Drivers.headless_firefox` |
36
+
37
+ ### Non-selenium drivers
38
+
39
+ | Driver | Usage |
40
+ |---------------------|----------------------------------------------|
41
+ | cuprite | `DVLA::Browser::Drivers.cuprite` |
42
+ | headless_cuprite | `DVLA::Browser::Drivers.headless_cuprite` |
43
+ | apparition | `DVLA::Browser::Drivers.apparition` |
44
+ | headless_apparition | `DVLA::Browser::Drivers.headless_apparition` |
45
+
46
+ ---
47
+
48
+ ### Default configuration
49
+
50
+ | Driver | Configuration |
51
+ |-----------------------|-------------------------------------------------------|
52
+ | chrome, edge, firefox | --disable-dev-shm-usage<br/> |
53
+ | headless_<driver> | --headless<br/>--no-sandbox |
54
+ | cuprite, apparition | { 'no-sandbox': nil, disable-smooth-scrolling: true } |
55
+
56
+ ---
57
+
58
+ ### Additional configuration
59
+
60
+ | Option | Description | supported-browsers |
61
+ |-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|
62
+ | remote: 'http://localhost:4444/wd/hub' | Allows you to talk to a remote browser | firefox |
63
+ | additional_options: ['window-size=1400,1920'] | Pass additional options to the driver<br/>Supported switches: https://peter.sh/experiments/chromium-command-line-switches/ | chrome, edge, firefox |
64
+ | additional_preferences: [{'download.default_directory': '<download_path>'}] | Pass additional preferences to the driver<br/>Documentation: https://www.selenium.dev/selenium/docs/api/rb/Selenium/WebDriver/Chromium/Options.html#add_preference-instance_method | chrome, edge, firefox |
65
+ | additional_options: { 'option': value, 'option': value } | Pass additional options to the driver<br/>Supported switched: https://www.rubydoc.info/gems/cuprite/ | cuprite, apparition |
66
+
67
+ ## Development
68
+
69
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
70
+ also run `bin/console` for an interactive prompt that will allow you to experiment.
71
+
72
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
73
+ version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version,
74
+ push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
75
+
76
+ ## Contributing
77
+
78
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/dvla-browser-drivers.
79
+
80
+ ## License
81
+
82
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/bin/console ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require 'pry'
6
+ require "dvla/browser/drivers"
7
+
8
+
9
+ # You can add fixtures and/or initialization code here to make experimenting
10
+ # with your gem easier. You can also use a different console, if you like.
11
+
12
+ # (If you use this, don't forget to add pry to your Gemfile!)
13
+ # require "pry"
14
+ # Pry.start
15
+
16
+ require "irb"
17
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/dvla/browser/drivers/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'dvla-browser-drivers'
7
+ spec.version = DVLA::Browser::Drivers::VERSION
8
+ spec.authors = ['Driver and Vehicle Licensing Agency (DVLA)','Tomos Griffiths']
9
+ spec.email = %w[tomos.griffiths@dvla.gov.uk]
10
+
11
+ spec.summary = 'Browser-drivers has pre-configured web-browser drivers that ' \
12
+ 'can be used out-of-the-box for the development of UI based applications.'
13
+ spec.description = 'Browser-drivers has pre-configured web-browser drivers that ' \
14
+ 'can be used out-of-the-box for the development of UI based applications. ' \
15
+ 'It is built using Ruby and utilises the Capybara library (A web application testing platform) ' \
16
+ 'to simulate how a user interacts with the applications being tested. ' \
17
+ 'It also has the facility to run Cuprite, which is a pure Ruby driver utilising Ferrum, ' \
18
+ 'a high level API to run headless tests.'
19
+ spec.license = 'MIT'
20
+ spec.required_ruby_version = '>= 3.1'
21
+ spec.homepage = 'https://github.com/dvla/dvla-browser-drivers'
22
+ if spec.respond_to?(:metadata)
23
+ # spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com''
24
+
25
+ spec.metadata['homepage_uri'] = spec.homepage
26
+ spec.metadata['source_code_uri'] = spec.homepage
27
+ else
28
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
29
+ 'public gem pushes.'
30
+ end
31
+
32
+ # Specify which files should be added to the gem when it is released.
33
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
34
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
35
+ `git ls-files -z`.split("\x0").select do |f|
36
+ f.match(/\A(?:lib|bin|exe)/) ||
37
+ f.match(/.(?:gemspec|md|ruby-version)\Z/) ||
38
+ f.match(/\AGemfile\Z/)
39
+ end
40
+ end
41
+
42
+ spec.bindir = 'exe'
43
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
44
+ spec.require_paths = %w[lib]
45
+
46
+ # Uncomment to register a new dependency of your gem
47
+ spec.add_runtime_dependency 'apparition', '>= 0.6'
48
+ spec.add_runtime_dependency 'capybara', '>= 3.37'
49
+ spec.add_runtime_dependency 'cuprite', '>= 0.14'
50
+ spec.add_runtime_dependency 'dvla-herodotus', '>= 1.0'
51
+ spec.add_runtime_dependency 'selenium-webdriver', '>= 4.0'
52
+
53
+ spec.add_development_dependency 'bundler-audit', '~> 0.9'
54
+ spec.add_development_dependency 'dvla-lint', '~> 1.7'
55
+ spec.add_development_dependency 'pry', '~> 0.14'
56
+ spec.add_development_dependency 'rake', '~> 13.0'
57
+ spec.add_development_dependency 'rspec', '~> 3.11'
58
+ spec.add_development_dependency 'rspec-sonarqube-formatter', '~> 1.5'
59
+ spec.add_development_dependency 'simplecov', '~> 0.22'
60
+ spec.add_development_dependency 'simplecov-console', '~> 0.9'
61
+
62
+ # For more information and examples about making a new gem, checkout our
63
+ # guide at: https://bundler.io/guides/creating_gem.html
64
+ end
@@ -0,0 +1,85 @@
1
+ module DVLA
2
+ module Browser
3
+ module Drivers
4
+ DRIVER_REGEX = /^(?:(?<headless>headless)_)?(?<browser>chrome|firefox|edge|cuprite|apparition)$/
5
+
6
+ OTHER_ACCEPTED_PARAMS = %i[timeout].freeze
7
+ OTHER_DRIVERS = %i[cuprite apparition].freeze
8
+ SELENIUM_ACCEPTED_PARAMS = %i[remote additional_options additional_preferences].freeze
9
+ SELENIUM_DRIVERS = %i[chrome firefox edge].freeze
10
+
11
+ # Creates methods in the Drivers module that matches the DRIVER_REGEX
12
+ # These methods will register a Driver for use by Capybara in a test pack
13
+ #
14
+ # @example Basic driver
15
+ # DVLA::Browser::Drivers.chrome
16
+ #
17
+ # @example Driver with additional arguments
18
+ # DVLA::Browser::Drivers.chrome(remote: 'http://localhost:4444/wd/hub')
19
+ def self.method_missing(method, *args, **kwargs, &block)
20
+ if (matches = method.match(DRIVER_REGEX))
21
+ headless = matches[:headless].is_a? String
22
+ browser = matches[:browser].to_sym
23
+
24
+ case browser
25
+ when *SELENIUM_DRIVERS
26
+ kwargs.each do |key, _value|
27
+ LOG.warn { "Key: '#{key}' will be ignored | Use one from: '#{SELENIUM_ACCEPTED_PARAMS}'" } unless SELENIUM_ACCEPTED_PARAMS.include?(key)
28
+ end
29
+
30
+ Capybara.register_driver method do |app|
31
+ options = Object.const_get("Selenium::WebDriver::#{browser.to_s.capitalize}::Options").new
32
+ options.add_argument('--disable-dev-shm-usage')
33
+
34
+ if headless
35
+ options.add_argument('--headless')
36
+ options.add_argument('--no-sandbox')
37
+ end
38
+
39
+ browser = :remote if kwargs[:remote]
40
+
41
+ if kwargs[:additional_options]
42
+ kwargs[:additional_options].each do |additional_option|
43
+ additional_option.prepend('--') unless additional_option.start_with?('--')
44
+ options.add_argument(additional_option)
45
+ end
46
+ end
47
+
48
+ if kwargs[:additional_preferences]
49
+ kwargs[:additional_preferences].each do |preference|
50
+ key, value = preference.first
51
+ options.add_preference(key, value)
52
+ end
53
+ end
54
+
55
+ Capybara::Selenium::Driver.new(app, url: kwargs[:remote], browser:, options:)
56
+ end
57
+ else
58
+ kwargs.each do |key, _value|
59
+ LOG.warn { "Key: '#{key}' will be ignored | Use one from: '#{OTHER_ACCEPTED_PARAMS}'" } unless OTHER_ACCEPTED_PARAMS.include?(key)
60
+ end
61
+
62
+ Capybara.register_driver method do |app|
63
+ Object.const_get("Capybara::#{browser.to_s.capitalize}::Driver").new(
64
+ app,
65
+ headless:,
66
+ timeout: kwargs[:timeout] || 30,
67
+ browser_options: { 'no-sandbox': nil, 'disable-smooth-scrolling': true },
68
+ )
69
+ end
70
+ end
71
+
72
+ LOG.info("Driver set to: '#{method}'")
73
+ Capybara.default_driver = method
74
+ Capybara.current_driver = method
75
+ else
76
+ super.method_missing(method, *args, &block)
77
+ end
78
+ end
79
+
80
+ def self.respond_to_missing?(method, *args)
81
+ method.match(DRIVER_REGEX) || super
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DVLA
4
+ module Browser
5
+ module Drivers
6
+ VERSION = '2.1.1'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'drivers/meta_drivers'
2
+ require_relative 'drivers/version'
3
+
4
+ require 'capybara/apparition'
5
+ require 'capybara/cuprite'
6
+ require 'dvla/herodotus'
7
+ require 'selenium-webdriver'
8
+
9
+ module DVLA
10
+ class Error < StandardError; end
11
+
12
+ DVLA::Herodotus.configure do |config|
13
+ config.system_name = 'browser-drivers'
14
+ config.pid = true
15
+ end
16
+
17
+ LOG = DVLA::Herodotus.logger
18
+ end
metadata ADDED
@@ -0,0 +1,243 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dvla-browser-drivers
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Driver and Vehicle Licensing Agency (DVLA)
8
+ - Tomos Griffiths
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2024-03-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: apparition
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: capybara
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '3.37'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '3.37'
42
+ - !ruby/object:Gem::Dependency
43
+ name: cuprite
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0.14'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0.14'
56
+ - !ruby/object:Gem::Dependency
57
+ name: dvla-herodotus
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: selenium-webdriver
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '4.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '4.0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: bundler-audit
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.9'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.9'
98
+ - !ruby/object:Gem::Dependency
99
+ name: dvla-lint
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1.7'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.7'
112
+ - !ruby/object:Gem::Dependency
113
+ name: pry
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '0.14'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '0.14'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rake
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '13.0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '13.0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rspec
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '3.11'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '3.11'
154
+ - !ruby/object:Gem::Dependency
155
+ name: rspec-sonarqube-formatter
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '1.5'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.5'
168
+ - !ruby/object:Gem::Dependency
169
+ name: simplecov
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '0.22'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.22'
182
+ - !ruby/object:Gem::Dependency
183
+ name: simplecov-console
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '0.9'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '0.9'
196
+ description: Browser-drivers has pre-configured web-browser drivers that can be used
197
+ out-of-the-box for the development of UI based applications. It is built using Ruby
198
+ and utilises the Capybara library (A web application testing platform) to simulate
199
+ how a user interacts with the applications being tested. It also has the facility
200
+ to run Cuprite, which is a pure Ruby driver utilising Ferrum, a high level API to
201
+ run headless tests.
202
+ email:
203
+ - tomos.griffiths@dvla.gov.uk
204
+ executables: []
205
+ extensions: []
206
+ extra_rdoc_files: []
207
+ files:
208
+ - ".ruby-version"
209
+ - Gemfile
210
+ - README.md
211
+ - bin/console
212
+ - bin/setup
213
+ - dvla-browser-drivers.gemspec
214
+ - lib/dvla/browser/drivers.rb
215
+ - lib/dvla/browser/drivers/meta_drivers.rb
216
+ - lib/dvla/browser/drivers/version.rb
217
+ homepage: https://github.com/dvla/dvla-browser-drivers
218
+ licenses:
219
+ - MIT
220
+ metadata:
221
+ homepage_uri: https://github.com/dvla/dvla-browser-drivers
222
+ source_code_uri: https://github.com/dvla/dvla-browser-drivers
223
+ post_install_message:
224
+ rdoc_options: []
225
+ require_paths:
226
+ - lib
227
+ required_ruby_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '3.1'
232
+ required_rubygems_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ requirements: []
238
+ rubygems_version: 3.5.3
239
+ signing_key:
240
+ specification_version: 4
241
+ summary: Browser-drivers has pre-configured web-browser drivers that can be used out-of-the-box
242
+ for the development of UI based applications.
243
+ test_files: []