automation_helpers 4.0 → 4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e31fd999ded8a53243daee17b49c7d85c65c54c0c75ab657669b4e8753f0efc4
4
- data.tar.gz: e0abb956e546004f43b9367f0c5e5bf6dbb51770f575642d6e00bfd1b5b0bcbf
3
+ metadata.gz: a45b85e5e998a666514c866da1cc6639fa113ebe88232a70ceb979c4a2877a03
4
+ data.tar.gz: d66c6284158e939d8d268126e8fd98833316ca2cfa4a29c3afbdd8002c1aa61a
5
5
  SHA512:
6
- metadata.gz: 8f981fb29c66cd31b7a08459f4804cdf0917550547aeafddc1397b861b9f0935d03270db452e7cccbabd954425ab5d19e96b8c307a727b1123c842688cb5d558
7
- data.tar.gz: 61a8a6dcbb015412438984f39983ea02073f15c9097428ba8cde64cfb4716b50c6dc73e68d0da9efea64b4cd86a197dfdea5e1030642c8c365191c734445a5ee
6
+ metadata.gz: 97f4e92ba3f4a1bc6629d07b94e60de3b9c722f27feb0700b8fbaf9953a4177302584ec8700245a942b3a9a114ca007e05f976f0ccb34d46a3e55a20b0486856
7
+ data.tar.gz: 6039a2641fe43f4f46ac5befd0987bd259391a2da6f59e1e553de76b58ab6ad8c01bccafb0a8ae49079036290da4de0d8571a8fb83549fa36530ab8902da3bcd
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2020-2021, The SitePrism team & Marcelo Nicolosi Santos
1
+ Copyright (c) 2020-2022, The SitePrism team & Marcelo Nicolosi Santos
2
2
 
3
3
  All rights reserved.
4
4
 
data/README.md CHANGED
@@ -34,7 +34,7 @@ Either require all of the extensions required, or require individual bits and pi
34
34
  ```
35
35
  $ bundle
36
36
  # Code anything relevant - Add tests for each public method!
37
- $ bundle exec rake
37
+ $ rspec && rubocop
38
38
  # Ensure it's all green! Then commit and push
39
39
  ```
40
40
 
@@ -9,11 +9,9 @@ require 'automation_helpers/drivers/v4/options'
9
9
  module AutomationHelpers
10
10
  module Drivers
11
11
  module V4
12
- #
13
- # {AutomationHelpers::Drivers::V4::Browserstack}
14
12
  #
15
13
  # The Browserstack Driver that will connect to a hosted grid
16
- # Requires a series of pre-set values to be passed in
14
+ # This requires a series of pre-set values to be passed in
17
15
  #
18
16
  class Browserstack
19
17
  attr_reader :browser, :browserstack_options, :device_options
@@ -6,10 +6,7 @@ module AutomationHelpers
6
6
  module Drivers
7
7
  module V4
8
8
  #
9
- # {AutomationHelpers::Drivers::V4::Capabilities}
10
- #
11
- # The Capabilities object that will be used to instantiate whatever driver you
12
- # are configuring
9
+ # The Capabilities object that will be used to instantiate whatever driver you are configuring
13
10
  #
14
11
  class Capabilities
15
12
  class << self
@@ -7,8 +7,6 @@ require 'automation_helpers/drivers/v4/options'
7
7
  module AutomationHelpers
8
8
  module Drivers
9
9
  module V4
10
- #
11
- # {AutomationHelpers::Drivers::V4::Local}
12
10
  #
13
11
  # The Local Driver that will spin up and run on your machine (Without connecting to any grid)
14
12
  #
@@ -5,12 +5,13 @@ require 'selenium/webdriver'
5
5
  module AutomationHelpers
6
6
  module Drivers
7
7
  module V4
8
- #
9
- # {AutomationHelpers::Drivers::V4::Options}
10
8
  #
11
9
  # The Options object that will be used to instantiate whatever driver you
12
10
  # are configuring
13
11
  #
12
+ # #### Initial setup options
13
+ #
14
+ # - **ENV["HEADLESS"]** (optional) - Whether you want your browser to run headless or not
14
15
  class Options
15
16
  class << self
16
17
  # @return [Selenium::Webdriver::Options]
@@ -43,7 +44,7 @@ module AutomationHelpers
43
44
  end
44
45
 
45
46
  def headless?
46
- ENV['HEADLESS'] == 'true'
47
+ ENV.fetch('HEADLESS', 'false') == 'true'
47
48
  end
48
49
  end
49
50
  end
@@ -6,11 +6,9 @@ require 'automation_helpers/drivers/v4/options'
6
6
  module AutomationHelpers
7
7
  module Drivers
8
8
  module V4
9
- #
10
- # {AutomationHelpers::Drivers::V4::Remote}
11
9
  #
12
10
  # The Remote Driver that will connect to a dockerised self-hosted grid
13
- # Expects the grid to be live and accepting node requests
11
+ # This expects the grid to be live **and** accepting node requests
14
12
  #
15
13
  class Remote
16
14
  attr_reader :browser
@@ -52,7 +50,7 @@ module AutomationHelpers
52
50
  end
53
51
 
54
52
  def hub_url
55
- ENV['HUB_URL']
53
+ ENV.fetch('HUB_URL')
56
54
  end
57
55
 
58
56
  def supported_browser?
@@ -2,11 +2,17 @@
2
2
 
3
3
  # Additional useful methods to extend the Array class with
4
4
  class Array
5
- # @return [Boolean]
5
+ # @return [Array]
6
6
  #
7
- # Test whether an array is wholly unique
8
- def uniq?
9
- uniq == self
7
+ # Generates an array of the english alphabet
8
+ # Accepts an input to determine what case of alphabet you want
9
+ def self.alphabet(type = :upper)
10
+ case type
11
+ when :upper; then ('A'..'Z').to_a
12
+ when :lower; then ('a'..'z').to_a
13
+ when :both; then ('a'..'z').to_a + ('A'..'Z').to_a
14
+ else raise ArgumentError, 'Invalid alphabet type. Must be :upper (default), :lower or :both'
15
+ end
10
16
  end
11
17
 
12
18
  # @return [Array]
@@ -15,4 +21,11 @@ class Array
15
21
  def non_uniq
16
22
  tally.select { |_key, count| count > 1 }.map(&:first)
17
23
  end
24
+
25
+ # @return [Boolean]
26
+ #
27
+ # Test whether an array is wholly unique
28
+ def uniq?
29
+ uniq == self
30
+ end
18
31
  end
@@ -4,7 +4,15 @@
4
4
  class String
5
5
  # @return [String]
6
6
  #
7
- # Convert's a regular string name into it's pascalized format
7
+ # Generates a single random letter from an array of the english alphabet
8
+ # Accepts an input to determine what case of alphabet you want
9
+ def self.alphabet_char(type = :upper)
10
+ Array.alphabet(type).sample
11
+ end
12
+
13
+ # @return [String]
14
+ #
15
+ # Converts a regular string name into it's pascalized format
8
16
  # This can then be used to generate a ClassName
9
17
  def pascalize
10
18
  split('_').map(&:capitalize).join
@@ -12,7 +20,15 @@ class String
12
20
 
13
21
  # @return [String]
14
22
  #
15
- # Convert's a regular string into a snake cased format
23
+ # Sanitize and convert every individual whitespace character to
24
+ # a regular space character (Does not sanitize newlines)
25
+ def sanitize_whitespace
26
+ gsub(/[ \t\r\f\u00A0]/, ' ')
27
+ end
28
+
29
+ # @return [String]
30
+ #
31
+ # Converts a regular string into a snake cased format
16
32
  # Will sanitize out some characters (Designed for titles)
17
33
  def snake_case
18
34
  gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
@@ -24,11 +40,10 @@ class String
24
40
  .downcase
25
41
  end
26
42
 
27
- # @return [String]
43
+ # @return [Boolean]
28
44
  #
29
- # Sanitize and convert every individual whitespace character to
30
- # a regular space character (Does not sanitize newlines)
31
- def sanitize_whitespace
32
- gsub(/[ \t\r\f\u00A0]/, ' ')
45
+ # Cast any string to true or false
46
+ def to_bool
47
+ %w[yes on true].include?(downcase)
33
48
  end
34
49
  end
@@ -7,6 +7,9 @@ module AutomationHelpers
7
7
  # @api private
8
8
  #
9
9
  class Logger
10
+ #
11
+ # Generate the Logger used in the gem
12
+ #
10
13
  def self.create(output = $stdout)
11
14
  logger = ::Logger.new(output)
12
15
  logger.progname = 'Automation Helpers'
@@ -2,9 +2,12 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # @api private
7
+ #
5
8
  class Base
6
9
  #
7
- # api private (Not intended to be instantiated directly!)
10
+ # api private (Not intended to be instantiated directly! Use the child classes)
8
11
  #
9
12
  def patch!
10
13
  raise 'This is no longer supported' if prevent_usage?
@@ -2,6 +2,9 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # Fix the issue where the `#text` method doesn't normalize whitespace (Only the matchers do)
7
+ #
5
8
  class Capybara < Base
6
9
  private
7
10
 
@@ -18,6 +21,9 @@ module AutomationHelpers
18
21
  end
19
22
  end
20
23
 
24
+ #
25
+ # @api private
26
+ #
21
27
  module SafariTextPatch
22
28
  def text(type = nil, normalize_ws: ::Capybara.default_normalize_ws)
23
29
  super(type, normalize_ws: normalize_ws)
@@ -2,6 +2,9 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # Fix the issue where the parser for parallel_tests doesn't permit the --retry flag (Or other flags at the end)
7
+ #
5
8
  class ParallelCucumber < Base
6
9
  private
7
10
 
@@ -17,8 +20,8 @@ module AutomationHelpers
17
20
  ::ParallelTests::Gherkin::Runner.extend RetryFlagFix
18
21
  end
19
22
 
20
- def deprecation_notice_date
21
- Time.new(2022, 6, 30)
23
+ def deprecate_from
24
+ '3.12.0'
22
25
  end
23
26
 
24
27
  def prevent_usage_from
@@ -2,6 +2,10 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # Fix the issue where the Selenium Logger isn't designed to parse characters that aren't standard ASCII
7
+ # (This is an issue in the parent Net-HTTP adapter that most loggers are built on)
8
+ #
5
9
  class SeleniumLogger < Base
6
10
  private
7
11
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # Fix the issue where the `#convert_cookie` API private method in selenium-webdriver doesn't include the
7
+ # 'httpOnly' property in the returned cookie hash structure
8
+ #
5
9
  class SeleniumManager < Base
6
10
  private
7
11
 
@@ -21,7 +25,7 @@ module AutomationHelpers
21
25
  end
22
26
 
23
27
  def prevent_usage_from
24
- '4.0.0.beta5'
28
+ '4.0.0'
25
29
  end
26
30
 
27
31
  def gem_version
@@ -29,6 +33,9 @@ module AutomationHelpers
29
33
  end
30
34
  end
31
35
 
36
+ #
37
+ # @api private
38
+ #
32
39
  module CookieConverter
33
40
  def convert_cookie(cookie)
34
41
  super(cookie)
@@ -2,13 +2,16 @@
2
2
 
3
3
  module AutomationHelpers
4
4
  module Patches
5
+ #
6
+ # Fix the issue where for some drivers selenium doesn't camelize the browser name key 'browserName' correctly
7
+ #
5
8
  class SeleniumOptions < Base
6
9
  def initialize(browser)
7
10
  @browser = browser
8
11
  super()
9
12
  end
10
13
 
11
- # @return [Nil || AutomationHelpers.logger.info]
14
+ # @return [nil || true]
12
15
  #
13
16
  # For SeleniumOptions we only want to run the patch when
14
17
  # we are on browsers without the relevant JSON fixes in upstream
@@ -30,7 +33,6 @@ module AutomationHelpers
30
33
  The issue is the driver, which is now fully W3C conformant expects `browserName`
31
34
 
32
35
  See: https://github.com/SeleniumHQ/selenium/pull/8834 for more details/discussion including this fix
33
- LH - Nov 2020
34
36
  DESCRIPTION
35
37
  end
36
38
 
@@ -42,11 +44,11 @@ module AutomationHelpers
42
44
  end
43
45
 
44
46
  def deprecate_from
45
- '4.0.0.beta5'
47
+ '4.0.0'
46
48
  end
47
49
 
48
50
  def prevent_usage_from
49
- '4.0.1'
51
+ '4.0.3'
50
52
  end
51
53
 
52
54
  def gem_version
@@ -54,6 +56,9 @@ module AutomationHelpers
54
56
  end
55
57
  end
56
58
 
59
+ #
60
+ # @api private
61
+ #
57
62
  module CapabilitiesAsJsonFix
58
63
  private
59
64
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AutomationHelpers
4
- VERSION = '4.0'
4
+ VERSION = '4.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: automation_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: '4.0'
4
+ version: '4.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Hill
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-19 00:00:00.000000000 Z
12
+ date: 2022-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capybara
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.27'
20
+ version: '3.30'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '3.27'
27
+ version: '3.30'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: cucumber
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: '5.0'
35
35
  - - "<"
36
36
  - !ruby/object:Gem::Version
37
- version: '8'
37
+ version: '9'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -44,21 +44,21 @@ dependencies:
44
44
  version: '5.0'
45
45
  - - "<"
46
46
  - !ruby/object:Gem::Version
47
- version: '8'
47
+ version: '9'
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: faraday
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.0'
54
+ version: '1.8'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
61
+ version: '1.8'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: parallel_tests
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -79,48 +79,70 @@ dependencies:
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.10'
82
+ version: '3.11'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.10'
89
+ version: '3.11'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: rubocop
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.22.3
96
+ version: 1.38.0
97
97
  type: :development
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.22.3
103
+ version: 1.38.0
104
104
  - !ruby/object:Gem::Dependency
105
- name: selenium-webdriver
105
+ name: rubocop-performance
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 4.0.0.alpha1
111
- - - "<"
110
+ version: 1.15.0
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.15.0
118
+ - !ruby/object:Gem::Dependency
119
+ name: rubocop-rspec
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
112
123
  - !ruby/object:Gem::Version
113
- version: '5'
124
+ version: 2.14.2
114
125
  type: :development
115
126
  prerelease: false
116
127
  version_requirements: !ruby/object:Gem::Requirement
117
128
  requirements:
118
- - - ">="
129
+ - - "~>"
119
130
  - !ruby/object:Gem::Version
120
- version: 4.0.0.alpha1
121
- - - "<"
131
+ version: 2.14.2
132
+ - !ruby/object:Gem::Dependency
133
+ name: selenium-webdriver
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '4.0'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
122
144
  - !ruby/object:Gem::Version
123
- version: '5'
145
+ version: '4.0'
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: webdrivers
126
148
  requirement: !ruby/object:Gem::Requirement