watir 7.2.0 → 7.3.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.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +9 -1
  3. data/.github/workflows/edge.yml +10 -2
  4. data/.github/workflows/firefox.yml +10 -2
  5. data/.github/workflows/ie.yml +1 -1
  6. data/.github/workflows/safari.yml +1 -1
  7. data/.github/workflows/unit.yml +3 -3
  8. data/.rubocop.yml +36 -14
  9. data/.rubocop_todo.yml +8 -1
  10. data/CHANGES.md +17 -1
  11. data/LICENSE +2 -2
  12. data/lib/watir/capabilities.rb +2 -12
  13. data/lib/watir/cookies.rb +7 -2
  14. data/lib/watir/elements/date_field.rb +2 -2
  15. data/lib/watir/elements/date_time_field.rb +2 -2
  16. data/lib/watir/elements/select.rb +3 -3
  17. data/lib/watir/locators/anchor/selector_builder.rb +3 -0
  18. data/lib/watir/locators/element/matcher.rb +2 -1
  19. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -1
  20. data/lib/watir/locators/element/selector_builder.rb +1 -1
  21. data/lib/watir/locators/text_field/matcher.rb +1 -5
  22. data/lib/watir/version.rb +1 -1
  23. data/lib/watir.rb +1 -0
  24. data/lib/watirspec/implementation.rb +1 -1
  25. data/lib/watirspec.rb +1 -1
  26. data/spec/locator_spec_helper.rb +3 -15
  27. data/spec/unit/capabilities_spec.rb +552 -561
  28. data/spec/unit/element_locator_spec.rb +89 -78
  29. data/spec/unit/match_elements/button_spec.rb +69 -62
  30. data/spec/unit/match_elements/element_spec.rb +303 -309
  31. data/spec/unit/match_elements/text_field_spec.rb +76 -73
  32. data/spec/unit/selector_builder/anchor_spec.rb +39 -33
  33. data/spec/unit/selector_builder/button_spec.rb +209 -202
  34. data/spec/unit/selector_builder/cell_spec.rb +48 -42
  35. data/spec/unit/selector_builder/element_spec.rb +632 -627
  36. data/spec/unit/selector_builder/row_spec.rb +119 -113
  37. data/spec/unit/selector_builder/text_field_spec.rb +195 -188
  38. data/spec/unit/selector_builder/textarea_spec.rb +22 -14
  39. data/spec/unit/wait_spec.rb +85 -81
  40. data/spec/watirspec/adjacent_spec.rb +249 -247
  41. data/spec/watirspec/after_hooks_spec.rb +161 -159
  42. data/spec/watirspec/alert_spec.rb +61 -58
  43. data/spec/watirspec/browser_spec.rb +411 -409
  44. data/spec/watirspec/capabilities_spec.rb +99 -112
  45. data/spec/watirspec/cookies_spec.rb +144 -115
  46. data/spec/watirspec/drag_and_drop_spec.rb +26 -24
  47. data/spec/watirspec/element_hidden_spec.rb +66 -60
  48. data/spec/watirspec/elements/area_spec.rb +49 -47
  49. data/spec/watirspec/elements/areas_spec.rb +27 -25
  50. data/spec/watirspec/elements/button_spec.rb +253 -251
  51. data/spec/watirspec/elements/buttons_spec.rb +36 -34
  52. data/spec/watirspec/elements/checkbox_spec.rb +48 -36
  53. data/spec/watirspec/elements/checkboxes_spec.rb +29 -27
  54. data/spec/watirspec/elements/collections_spec.rb +126 -119
  55. data/spec/watirspec/elements/date_field_spec.rb +202 -183
  56. data/spec/watirspec/elements/date_fields_spec.rb +29 -27
  57. data/spec/watirspec/elements/date_time_field_spec.rb +216 -195
  58. data/spec/watirspec/elements/date_time_fields_spec.rb +30 -28
  59. data/spec/watirspec/elements/dd_spec.rb +87 -85
  60. data/spec/watirspec/elements/dds_spec.rb +27 -25
  61. data/spec/watirspec/elements/del_spec.rb +106 -104
  62. data/spec/watirspec/elements/dels_spec.rb +26 -24
  63. data/spec/watirspec/elements/div_spec.rb +225 -221
  64. data/spec/watirspec/elements/divs_spec.rb +37 -35
  65. data/spec/watirspec/elements/dl_spec.rb +110 -108
  66. data/spec/watirspec/elements/dls_spec.rb +28 -26
  67. data/spec/watirspec/elements/dt_spec.rb +86 -84
  68. data/spec/watirspec/elements/dts_spec.rb +27 -25
  69. data/spec/watirspec/elements/element_spec.rb +794 -775
  70. data/spec/watirspec/elements/elements_spec.rb +40 -38
  71. data/spec/watirspec/elements/em_spec.rb +62 -60
  72. data/spec/watirspec/elements/ems_spec.rb +28 -26
  73. data/spec/watirspec/elements/filefield_spec.rb +116 -114
  74. data/spec/watirspec/elements/filefields_spec.rb +28 -26
  75. data/spec/watirspec/elements/font_spec.rb +20 -18
  76. data/spec/watirspec/elements/form_spec.rb +51 -49
  77. data/spec/watirspec/elements/forms_spec.rb +29 -27
  78. data/spec/watirspec/elements/frame_spec.rb +89 -87
  79. data/spec/watirspec/elements/frames_spec.rb +27 -25
  80. data/spec/watirspec/elements/hidden_spec.rb +81 -79
  81. data/spec/watirspec/elements/hiddens_spec.rb +28 -26
  82. data/spec/watirspec/elements/hn_spec.rb +59 -57
  83. data/spec/watirspec/elements/hns_spec.rb +26 -24
  84. data/spec/watirspec/elements/iframe_spec.rb +195 -191
  85. data/spec/watirspec/elements/iframes_spec.rb +31 -29
  86. data/spec/watirspec/elements/image_spec.rb +148 -146
  87. data/spec/watirspec/elements/images_spec.rb +26 -24
  88. data/spec/watirspec/elements/input_spec.rb +9 -7
  89. data/spec/watirspec/elements/ins_spec.rb +106 -104
  90. data/spec/watirspec/elements/inses_spec.rb +26 -24
  91. data/spec/watirspec/elements/label_spec.rb +56 -54
  92. data/spec/watirspec/elements/labels_spec.rb +26 -24
  93. data/spec/watirspec/elements/li_spec.rb +76 -74
  94. data/spec/watirspec/elements/link_spec.rb +173 -177
  95. data/spec/watirspec/elements/links_spec.rb +45 -43
  96. data/spec/watirspec/elements/lis_spec.rb +27 -25
  97. data/spec/watirspec/elements/list_spec.rb +44 -42
  98. data/spec/watirspec/elements/map_spec.rb +57 -55
  99. data/spec/watirspec/elements/maps_spec.rb +27 -25
  100. data/spec/watirspec/elements/meta_spec.rb +16 -14
  101. data/spec/watirspec/elements/metas_spec.rb +26 -24
  102. data/spec/watirspec/elements/ol_spec.rb +56 -65
  103. data/spec/watirspec/elements/ols_spec.rb +26 -24
  104. data/spec/watirspec/elements/option_spec.rb +91 -89
  105. data/spec/watirspec/elements/p_spec.rb +81 -79
  106. data/spec/watirspec/elements/pre_spec.rb +77 -75
  107. data/spec/watirspec/elements/pres_spec.rb +26 -24
  108. data/spec/watirspec/elements/ps_spec.rb +26 -24
  109. data/spec/watirspec/elements/radio_spec.rb +251 -249
  110. data/spec/watirspec/elements/radios_spec.rb +28 -26
  111. data/spec/watirspec/elements/select_list_spec.rb +537 -526
  112. data/spec/watirspec/elements/select_lists_spec.rb +32 -30
  113. data/spec/watirspec/elements/span_spec.rb +112 -110
  114. data/spec/watirspec/elements/spans_spec.rb +26 -24
  115. data/spec/watirspec/elements/strong_spec.rb +58 -58
  116. data/spec/watirspec/elements/strongs_spec.rb +28 -26
  117. data/spec/watirspec/elements/table_spec.rb +192 -139
  118. data/spec/watirspec/elements/tables_spec.rb +28 -26
  119. data/spec/watirspec/elements/tbody_spec.rb +74 -72
  120. data/spec/watirspec/elements/tbodys_spec.rb +40 -38
  121. data/spec/watirspec/elements/td_spec.rb +66 -64
  122. data/spec/watirspec/elements/tds_spec.rb +41 -39
  123. data/spec/watirspec/elements/text_field_spec.rb +206 -204
  124. data/spec/watirspec/elements/text_fields_spec.rb +30 -28
  125. data/spec/watirspec/elements/textarea_spec.rb +20 -18
  126. data/spec/watirspec/elements/textareas_spec.rb +18 -16
  127. data/spec/watirspec/elements/tfoot_spec.rb +65 -63
  128. data/spec/watirspec/elements/tfoots_spec.rb +42 -40
  129. data/spec/watirspec/elements/thead_spec.rb +65 -63
  130. data/spec/watirspec/elements/theads_spec.rb +42 -40
  131. data/spec/watirspec/elements/tr_spec.rb +48 -46
  132. data/spec/watirspec/elements/trs_spec.rb +42 -40
  133. data/spec/watirspec/elements/ul_spec.rb +56 -54
  134. data/spec/watirspec/elements/uls_spec.rb +26 -24
  135. data/spec/watirspec/radio_set_spec.rb +269 -267
  136. data/spec/watirspec/screenshot_spec.rb +20 -18
  137. data/spec/watirspec/scroll_spec.rb +152 -148
  138. data/spec/watirspec/shadow_root_spec.rb +88 -83
  139. data/spec/watirspec/support/rspec_matchers.rb +34 -25
  140. data/spec/watirspec/user_editable_spec.rb +200 -198
  141. data/spec/watirspec/wait_spec.rb +289 -295
  142. data/spec/watirspec/window_switching_spec.rb +423 -434
  143. data/spec/watirspec_helper.rb +1 -23
  144. data/watir.gemspec +6 -5
  145. metadata +47 -37
  146. data/spec/watirspec/attributes_spec.rb +0 -18
  147. data/spec/watirspec/elements/table_nesting_spec.rb +0 -51
  148. data/spec/watirspec/special_chars_spec.rb +0 -23
  149. data/support/travis.sh +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e21571e92209dad62a8048886e0d383b0a2d8c720b2fa42cdb8d23c0f790a28
4
- data.tar.gz: 2ebaf5e9faf6aa665986cb333b264e29a1b3400438f8eabecdc91ec42ce640b3
3
+ metadata.gz: a0bd050e4d97703802051446eb12d01751b5e63a10fe70353f0f955ac2bb9424
4
+ data.tar.gz: e573957fe4cd87d311af62b9a77ec8c6383f65f1e4ead17e5f117c40f31f87f8
5
5
  SHA512:
6
- metadata.gz: b631f01f18c1741b4949188ead10e9f42dd9e7f20853e6a11a4563c1cfeca71efd9cc4dc5d186ab9021f7b8134d73760519d34a765cd21498a4e454361d23ae9
7
- data.tar.gz: 433d5075795f765aa516811c956573670f97efe667e2fbadb7a41be9acc96ad3a85df712b21ed23f73dcd8c7f0f70a15ad1db2c4a888f3a92ab2a1380c6f0e8b
6
+ metadata.gz: 9409ddc8d5914e07ce3f8ef316be713d09bdbea6d130dc1bdf6be693930825b25baefd9dc200f5386a1a53955b2bbef7f48375e911897db2db33be4a337b85f3
7
+ data.tar.gz: fe6668eae425bc81e1a396dd81f41196d72d217eedca95a752e20c038fa43e55c87a951620ae37fc834517cbadf4b7e42b360b86adcdbba0798f929caf2ec866
@@ -13,7 +13,7 @@ jobs:
13
13
  fail-fast: false
14
14
  matrix:
15
15
  os: [ubuntu-latest, macos-latest, windows-latest]
16
- ruby: [ 2.7, 3.1 ]
16
+ ruby: [ 3.0, 3.2 ]
17
17
  steps:
18
18
  - name: Checkout source tree
19
19
  uses: actions/checkout@v2
@@ -41,6 +41,14 @@ jobs:
41
41
  ruby-version: ${{ matrix.ruby }}
42
42
  - name: Install gems
43
43
  run: bundle install
44
+ - name: Remove driver directories Windows
45
+ if: matrix.os == 'windows-latest'
46
+ run: |
47
+ rm "$env:ChromeWebDriver" -r -v
48
+ - name: Remove driver directories Non-Windows
49
+ if: matrix.os != 'windows-latest'
50
+ run: |
51
+ sudo rm -rf $CHROMEWEBDRIVER
44
52
  - name: Run tests
45
53
  run: bundle exec rake spec:chrome
46
54
  env:
@@ -13,7 +13,7 @@ jobs:
13
13
  fail-fast: false
14
14
  matrix:
15
15
  os: [macos-latest, windows-latest]
16
- ruby: [ 2.7, 3.1 ]
16
+ ruby: [ 3.0, 3.2 ]
17
17
  steps:
18
18
  - name: Checkout source tree
19
19
  uses: actions/checkout@v2
@@ -32,5 +32,13 @@ jobs:
32
32
  ruby-version: ${{ matrix.ruby }}
33
33
  - name: Install gems
34
34
  run: bundle install
35
+ - name: Remove driver directories Windows
36
+ if: matrix.os == 'windows-latest'
37
+ run: |
38
+ rm "$env:EdgeWebDriver" -r -v
39
+ - name: Remove driver directories Non-Windows
40
+ if: matrix.os != 'windows-latest'
41
+ run: |
42
+ sudo rm -rf $EDGEWEBDRIVER
35
43
  - name: Run tests
36
- run: bundle exec rake spec:chrome
44
+ run: bundle exec rake spec:edge
@@ -13,7 +13,7 @@ jobs:
13
13
  fail-fast: false
14
14
  matrix:
15
15
  os: [ubuntu-latest, macos-latest, windows-latest]
16
- ruby: [ 2.7, 3.1 ]
16
+ ruby: [ 3.0, 3.2 ]
17
17
  steps:
18
18
  - name: Checkout source tree
19
19
  uses: actions/checkout@v2
@@ -41,7 +41,15 @@ jobs:
41
41
  ruby-version: ${{ matrix.ruby }}
42
42
  - name: Install gems
43
43
  run: bundle install
44
+ - name: Remove driver directories Windows
45
+ if: matrix.os == 'windows-latest'
46
+ run: |
47
+ rm "$env:GeckoWebDriver" -r -v
48
+ - name: Remove driver directories Non-Windows
49
+ if: matrix.os != 'windows-latest'
50
+ run: |
51
+ sudo rm -rf $GECKOWEBDRIVER
44
52
  - name: Run tests
45
- run: bundle exec rake spec:chrome
53
+ run: bundle exec rake spec:firefox
46
54
  env:
47
55
  DISPLAY: :99
@@ -12,7 +12,7 @@ jobs:
12
12
  strategy:
13
13
  fail-fast: false
14
14
  matrix:
15
- ruby: [ 2.7, 3.1 ]
15
+ ruby: [ 3.0, 3.2 ]
16
16
  steps:
17
17
  - name: Checkout source tree
18
18
  uses: actions/checkout@v2
@@ -12,7 +12,7 @@ jobs:
12
12
  strategy:
13
13
  fail-fast: false
14
14
  matrix:
15
- ruby: [ 2.7, 3.1 ]
15
+ ruby: [ 3.0, 3.2 ]
16
16
  steps:
17
17
  - name: Checkout source tree
18
18
  uses: actions/checkout@v2
@@ -21,7 +21,7 @@ jobs:
21
21
  - name: Install Ruby
22
22
  uses: ruby/setup-ruby@v1
23
23
  with:
24
- ruby-version: 2.7
24
+ ruby-version: 3.0
25
25
  - name: Install gems
26
26
  run: bundle install
27
27
  - name: Run tests
@@ -33,7 +33,7 @@ jobs:
33
33
  strategy:
34
34
  fail-fast: false
35
35
  matrix:
36
- ruby: ['2.7', '3.0', '3.1']
36
+ ruby: ['3.0', '3.1', '3.2', 'jruby-9.4.0.0', 'truffleruby-22.3.0']
37
37
  steps:
38
38
  - name: Checkout source tree
39
39
  uses: actions/checkout@v2
@@ -54,7 +54,7 @@ jobs:
54
54
  - name: Install Ruby
55
55
  uses: ruby/setup-ruby@v1
56
56
  with:
57
- ruby-version: 2.7
57
+ ruby-version: 3.0
58
58
  - name: Install gems
59
59
  run: bundle install
60
60
  - run: bundle exec rubocop
data/.rubocop.yml CHANGED
@@ -3,23 +3,23 @@ inherit_from: .rubocop_todo.yml
3
3
  require:
4
4
  - rubocop-performance
5
5
  - rubocop-rake
6
+ - rubocop-rspec
6
7
 
7
8
  AllCops:
8
- TargetRubyVersion: 2.7
9
+ TargetRubyVersion: 3.0
9
10
  NewCops: enable
10
11
  Exclude:
11
12
  - 'lib/watir/elements/html_elements.rb'
12
13
  - 'lib/watir/elements/svg_elements.rb'
13
14
 
15
+ Gemspec/DevelopmentDependencies:
16
+ Enabled: false
17
+
14
18
  Layout/SpaceInsideHashLiteralBraces:
15
19
  EnforcedStyle: no_space
16
20
 
17
- Lint/UnifiedInteger:
18
- Exclude:
19
- - 'lib/watir/locators/element/selector_builder.rb'
20
-
21
21
  Metrics/AbcSize:
22
- Max: 22
22
+ Max: 23
23
23
  Exclude:
24
24
  - 'lib/watir/locators/element/selector_builder.rb'
25
25
  - 'lib/watir/locators/element/selector_builder/*.rb'
@@ -28,15 +28,10 @@ Metrics/AbcSize:
28
28
 
29
29
  Metrics/BlockLength:
30
30
  Exclude:
31
- - 'spec/**/*'
32
31
  - 'support/doctest_helper.rb'
33
32
  - 'watir.gemspec'
34
33
  - 'Rakefile'
35
34
 
36
- Metrics/ModuleLength:
37
- Exclude:
38
- - 'spec/**/*'
39
-
40
35
  Metrics/ClassLength:
41
36
  Max: 93
42
37
  Exclude:
@@ -50,6 +45,7 @@ Metrics/ClassLength:
50
45
  - 'lib/watir/elements/select.rb'
51
46
  - 'lib/watir/generator/base/spec_extractor.rb'
52
47
  - 'lib/watir/element_collection.rb'
48
+ - 'spec/**/*_spec.rb'
53
49
 
54
50
  Metrics/CyclomaticComplexity:
55
51
  Max: 9
@@ -61,14 +57,40 @@ Metrics/MethodLength:
61
57
  Max: 18
62
58
  Exclude:
63
59
  - 'lib/watir/locators/element/selector_builder.rb'
64
- - 'lib/watir/locators/element/selector_builder/xpath.rb'
65
60
  - 'lib/watir/locators/element/selector_builder/regexp_disassembler.rb'
66
61
 
62
+ Metrics/ModuleLength:
63
+ Exclude:
64
+ - 'spec/**/*'
65
+
67
66
  Metrics/PerceivedComplexity:
68
67
  Max: 10
69
68
 
70
- Performance/CollectionLiteralInLoop:
71
- MinSize: 3
69
+ RSpec/AnyInstance:
70
+ Enabled: false
71
+
72
+ RSpec/BeforeAfterAll:
73
+ Enabled: false
74
+
75
+ RSpec/ExampleLength:
76
+ Enabled: false
77
+
78
+ RSpec/IndexedLet:
79
+ Enabled: false
80
+
81
+ RSpec/MultipleExpectations:
82
+ Enabled: false
83
+
84
+ RSpec/MultipleMemoizedHelpers:
85
+ Exclude:
86
+ - 'spec/watirspec/capabilities_spec.rb'
87
+
88
+ RSpec/NoExpectationExample:
89
+ Exclude:
90
+ - 'spec/watirspec/cookies_spec.rb'
91
+
92
+ Style/ArgumentsForwarding:
93
+ Enabled: false
72
94
 
73
95
  Style/BlockDelimiters:
74
96
  EnforcedStyle: braces_for_chaining
data/.rubocop_todo.yml CHANGED
@@ -1,10 +1,17 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-08-27 01:55:04 UTC using RuboCop version 0.89.1.
3
+ # on 2022-12-31 19:29:43 UTC using RuboCop version 1.40.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 1
10
+ RSpec/PendingWithoutReason:
11
+ Exclude:
12
+ - 'spec/watirspec/browser_spec.rb'
13
+
14
+ # Offense count: 114
15
+ # Configuration parameters: AllowedConstants.
9
16
  Style/Documentation:
10
17
  Enabled: false
data/CHANGES.md CHANGED
@@ -1,4 +1,20 @@
1
- ### 7.2.0 (2022-12-22)
1
+ ### 7.3.0 (2023-08-04)
2
+
3
+ * Fix implementation of headless to work with Selenium 4.11
4
+ * Remove support for Ruby 2.7
5
+ * `DateField` and `DateTimeField` accept inputs that behave like Date (#969)
6
+ * Add support for `http_only` and `same_site` cookie values (thanks Alexandre ZANNI #968)
7
+
8
+ ### 7.2.2 (2023-01-03)
9
+
10
+ * Fix bug with processing vendor name-spaced capabilities
11
+
12
+ ### 7.2.1 (2023-01-02)
13
+
14
+ * Fix bug for building locators with JRuby
15
+ * Fix bug for inferring internet explorer browser name from options
16
+
17
+ ### 7.2.0 (2022-12-24)
2
18
 
3
19
  * Implement Shadow DOM support (#953)
4
20
  * Implement existing `Scroll#by` with Selenium Actions Class instead of JavaScript
data/LICENSE CHANGED
@@ -1,8 +1,8 @@
1
1
  (the MIT License)
2
2
 
3
3
  Copyright (c) 2009-2015 Jari Bakken
4
- Copyright (c) 2015-2021 Alex Rodionov, Titus Fortner
5
- Copyright (c) 2018-2021 Justin Ko
4
+ Copyright (c) 2015-2023 Alex Rodionov, Titus Fortner
5
+ Copyright (c) 2018-2023 Justin Ko
6
6
 
7
7
  Permission is hereby granted, free of charge, to any person obtaining
8
8
  a copy of this software and associated documentation files (the
@@ -89,9 +89,6 @@ module Watir
89
89
  process_proxy_options(options)
90
90
  browser_specific_options(options)
91
91
 
92
- vendor_opts = process_vendor_options(browser_options)
93
- vendor_opts.each { |opts| options.add_option(opts) }
94
-
95
92
  options
96
93
  end
97
94
 
@@ -108,13 +105,6 @@ module Watir
108
105
  options.proxy = proxy
109
106
  end
110
107
 
111
- def process_vendor_options(opts)
112
- return [] unless opts.is_a? Hash
113
-
114
- vendor = opts.select { |key, _val| key.to_s.include?(':') && opts.delete(key) }
115
- vendor.map { |k, v| Selenium::WebDriver::Remote::Capabilities.new(k => v) }
116
- end
117
-
118
108
  def convert_timeouts(browser_options)
119
109
  browser_options[:timeouts] ||= {}
120
110
  browser_options[:timeouts].each_key do |key|
@@ -142,7 +132,7 @@ module Watir
142
132
  options.args << '--no-sandbox'
143
133
  end
144
134
  when :firefox
145
- options.headless! if @options.delete(:headless)
135
+ options.args << '-headless' if @options.delete(:headless)
146
136
  when :safari
147
137
  Selenium::WebDriver::Safari.technology_preview! if @options.delete(:technology_preview)
148
138
  end
@@ -172,7 +162,7 @@ module Watir
172
162
  elsif options[:options].is_a?(Selenium::WebDriver::Options)
173
163
  options[:options].class.to_s.split('::')[-2].downcase.to_sym
174
164
  elsif options.key?(:options)
175
- options.dig(:options, :browser_name).downcase.to_sym
165
+ options.dig(:options, :browser_name).tr(' ', '_').downcase.to_sym
176
166
  else
177
167
  :chrome
178
168
  end
data/lib/watir/cookies.rb CHANGED
@@ -43,16 +43,19 @@ module Watir
43
43
  # Adds new cookie.
44
44
  #
45
45
  # @example
46
- # browser.cookies.add 'my_session', 'BAh7B0kiD3Nlc3Npb25faWQGOgZFRkk', secure: true
46
+ # browser.cookies.add 'my_session', 'BAh7B0kiD3Nlc3Npb25faWQGOgZFRkk', secure: true, http_only: true
47
47
  #
48
48
  # @param [String] name
49
49
  # @param [String] value
50
50
  # @param [Hash] opts
51
51
  # @option opts [Boolean] :secure
52
+ # @option opts [Boolean] :http_only
52
53
  # @option opts [String] :path
54
+ # @option opts [String] :same_site
53
55
  # @option opts [Time, DateTime, NilClass] :expires
54
56
  # @option opts [String] :domain
55
57
  #
58
+ # @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie
56
59
 
57
60
  def add(name, value, opts = {})
58
61
  cookie = {
@@ -60,7 +63,9 @@ module Watir
60
63
  value: value
61
64
  }
62
65
  cookie[:secure] = opts[:secure] if opts.key?(:secure)
66
+ cookie[:http_only] = opts[:http_only] if opts.key?(:http_only)
63
67
  cookie[:path] = opts[:path] if opts.key?(:path)
68
+ cookie[:same_site] = opts[:same_site] if opts.key?(:same_site)
64
69
  expires = opts[:expires]
65
70
  if expires
66
71
  cookie[:expires] = expires.is_a?(String) ? ::Time.parse(expires) : expires
@@ -117,7 +122,7 @@ module Watir
117
122
  #
118
123
 
119
124
  def load(file = '.cookies')
120
- YAML.safe_load(File.read(file), permitted_classes: [::Symbol, ::Time]).each do |c|
125
+ YAML.safe_load_file(file, permitted_classes: [::Symbol, ::Time]).each do |c|
121
126
  add(c.delete(:name), c.delete(:value), c)
122
127
  end
123
128
  end
@@ -9,8 +9,8 @@ module Watir
9
9
  def set!(date)
10
10
  date = Date.parse date if date.is_a?(String)
11
11
 
12
- message = "DateField##{__callee__} only accepts instances of Date or Time"
13
- raise ArgumentError, message unless [Date, ::Time].include?(date.class)
12
+ message = "DateField##{__callee__} only accepts instances that respond to #strftime"
13
+ raise ArgumentError, message unless date.respond_to?(:strftime)
14
14
 
15
15
  date_string = date.strftime('%Y-%m-%d')
16
16
  element_call(:wait_for_writable) do
@@ -9,8 +9,8 @@ module Watir
9
9
  def set!(date)
10
10
  date = ::Time.parse date if date.is_a?(String)
11
11
 
12
- message = "DateTimeField##{__callee__} only accepts instances of DateTime or Time"
13
- raise ArgumentError, message unless [DateTime, ::Time].include?(date.class)
12
+ message = "DateTimeField##{__callee__} only accepts instances that respond to #strftime"
13
+ raise ArgumentError, message unless date.respond_to?(:strftime)
14
14
 
15
15
  date_time_string = date.strftime('%Y-%m-%dT%H:%M')
16
16
  element_call(:wait_for_writable) do
@@ -114,9 +114,9 @@ module Watir
114
114
  def parse_select_args(str_or_rx, text, value, label)
115
115
  selectors = {}
116
116
  selectors[:any] = str_or_rx unless str_or_rx.empty?
117
- selectors[:text] = Array[text] if text
118
- selectors[:value] = Array[value] if value
119
- selectors[:label] = Array[label] if label
117
+ selectors[:text] = [text] if text
118
+ selectors[:value] = [value] if value
119
+ selectors[:label] = [label] if label
120
120
 
121
121
  raise ArgumentError, "too many arguments used for Select#select: #{selectors}" if selectors.size > 1
122
122
 
@@ -4,6 +4,9 @@ module Watir
4
4
  module Locators
5
5
  class Anchor
6
6
  class SelectorBuilder < Element::SelectorBuilder
7
+ class XPath < Element::SelectorBuilder::XPath
8
+ end
9
+
7
10
  private
8
11
 
9
12
  def build_wd_selector(selector)
@@ -58,11 +58,12 @@ module Watir
58
58
  end
59
59
 
60
60
  def elements_match?(element, values_to_match)
61
+ class_keys = %i[class class_name]
61
62
  values_to_match.all? do |how, expected|
62
63
  if how == :tag_name
63
64
  validate_tag(element, expected)
64
65
  # TODO: Can this be class_name here or does that get converted?
65
- elsif %i[class class_name].include?(how)
66
+ elsif class_keys.include?(how)
66
67
  value = fetch_value(element, how)
67
68
  [expected].flatten.all? do |match|
68
69
  value.split.any? do |class_value|
@@ -36,12 +36,13 @@ module Watir
36
36
  end
37
37
 
38
38
  def extract_strings(expression, strings)
39
+ meta_set = %i[meta set]
39
40
  expression.each do |exp|
40
41
  if optional?(exp)
41
42
  strings.push(+'')
42
43
  next
43
44
  end
44
- if %i[meta set].include?(exp.type)
45
+ if meta_set.include?(exp.type)
45
46
  strings.push(+'')
46
47
  next
47
48
  end
@@ -7,7 +7,7 @@ module Watir
7
7
  include Exception
8
8
  attr_reader :custom_attributes, :built
9
9
 
10
- WILDCARD_ATTRIBUTE = /^(aria|data)_(.+)$/.freeze
10
+ WILDCARD_ATTRIBUTE = /^(aria|data)_(.+)$/
11
11
  VALID_WHATS = Hash.new([String, Regexp, TrueClass, FalseClass]).merge(adjacent: [::Symbol],
12
12
  xpath: [String],
13
13
  css: [String],
@@ -21,16 +21,12 @@ module Watir
21
21
  values_to_match[:text] = values_to_match.delete(key)
22
22
  end
23
23
  else
24
- return
24
+ return false
25
25
  end
26
26
 
27
27
  super
28
28
  end
29
29
 
30
- def text_regexp_deprecation(*)
31
- # does not apply to text_field
32
- end
33
-
34
30
  def validate_tag(element, _expected)
35
31
  tag_name = fetch_value(element, :tag_name)
36
32
  matches_values?(tag_name, 'input')
data/lib/watir/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Watir
4
- VERSION = '7.2.0'
4
+ VERSION = '7.3.0'
5
5
  end
data/lib/watir.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'net/http'
3
4
  require 'selenium-webdriver'
4
5
  require 'time'
5
6
 
@@ -39,7 +39,7 @@ module WatirSpec
39
39
  end
40
40
 
41
41
  def inspect_args
42
- selenium_opts = browser_args.last
42
+ selenium_opts = browser_args.last.dup
43
43
 
44
44
  options = selenium_opts.delete(:options)
45
45
  args = ["#{browser_args.first} tests:\n"]
data/lib/watirspec.rb CHANGED
@@ -33,7 +33,7 @@ module WatirSpec
33
33
 
34
34
  def load_support
35
35
  root = File.expand_path('../spec/watirspec', __dir__)
36
- Dir.glob("#{root}/support/**/*.rb").sort.each do |file|
36
+ Dir.glob("#{root}/support/**/*.rb").each do |file|
37
37
  require file
38
38
  end
39
39
  end
@@ -3,9 +3,8 @@
3
3
  module LocatorSpecHelper
4
4
  def browser
5
5
  @browser ||= instance_double(Watir::Browser, wd: driver)
6
- allow(@browser).to receive(:browser).and_return(@browser)
6
+ allow(@browser).to receive_messages(browser: @browser, locator_namespace: @locator_namespace || Watir::Locators)
7
7
  allow(@browser).to receive(:is_a?).with(Watir::Browser).and_return(true)
8
- allow(@browser).to receive(:locator_namespace).and_return(@locator_namespace || Watir::Locators)
9
8
  @browser
10
9
  end
11
10
 
@@ -30,8 +29,7 @@ module LocatorSpecHelper
30
29
 
31
30
  def element_matcher
32
31
  @element_matcher ||= instance_double(Watir::Locators::Element::Matcher)
33
- allow(@element_matcher).to receive(:query_scope).and_return(browser)
34
- allow(@element_matcher).to receive(:selector).and_return(@locator || {})
32
+ allow(@element_matcher).to receive_messages(query_scope: browser, selector: @locator || {})
35
33
  @element_matcher
36
34
  end
37
35
 
@@ -39,14 +37,6 @@ module LocatorSpecHelper
39
37
  Watir::Locators::Element::Locator.new(element_matcher)
40
38
  end
41
39
 
42
- def expect_one(*args)
43
- expect(driver).to receive(:find_element).with(*args)
44
- end
45
-
46
- def expect_all(*args)
47
- expect(driver).to receive(:find_elements).with(*args)
48
- end
49
-
50
40
  def locate_one(selector = nil)
51
41
  selector ||= @locator || {}
52
42
  locator.locate ordered_hash(selector)
@@ -67,10 +57,8 @@ module LocatorSpecHelper
67
57
  klass = opts.delete(:watir_element) || Watir::HTMLElement
68
58
  el = instance_double(klass, opts)
69
59
 
70
- allow(el).to receive(:enabled?).and_return true
71
- allow(el).to receive(:selector_builder).and_return(selector_builder)
60
+ allow(el).to receive_messages(enabled?: true, selector_builder: selector_builder, selector: @selector || {})
72
61
  allow(el).to receive(:wd).and_return wd_element unless opts.key?(:wd)
73
- allow(el).to receive(:selector).and_return(@selector || {})
74
62
  el
75
63
  end
76
64