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
@@ -2,119 +2,125 @@
2
2
 
3
3
  require_relative '../unit_helper'
4
4
 
5
- describe Watir::Locators::Row::SelectorBuilder do
6
- include LocatorSpecHelper
7
-
8
- let(:row_selector_builder) { described_class.new(attributes, query_scope) }
9
- let(:selector_built) { row_selector_builder.build(selector).reject { |key| key == :scope } }
10
- let(:selector) { @selector || {} }
11
-
12
- describe '#build' do
13
- context 'with query scopes' do
14
- it 'with only table query scope' do
15
- @query_scope = element(tag_name: 'table')
16
-
17
- built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
18
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
19
- "./*[local-name()='tfoot']/*[local-name()='tr']"}
20
-
21
- expect(selector_built).to eq built
22
- end
23
-
24
- it 'with tbody query scope' do
25
- @query_scope = element(tag_name: 'tbody')
26
- built = {xpath: "./*[local-name()='tr']"}
27
-
28
- expect(selector_built).to eq built
29
- end
30
-
31
- it 'with thead query scope' do
32
- @query_scope = element(tag_name: 'thead')
33
- built = {xpath: "./*[local-name()='tr']"}
34
-
35
- expect(selector_built).to eq built
36
- end
37
-
38
- it 'with tfoot query scope' do
39
- @query_scope = element(tag_name: 'tfoot')
40
- built = {xpath: "./*[local-name()='tr']"}
41
-
42
- expect(selector_built).to eq built
43
- end
44
- end
45
-
46
- context 'when tag name is specified' do
47
- before do
48
- @query_scope = element(tag_name: 'table')
49
- end
50
-
51
- context 'with index' do
52
- it 'positive' do
53
- @selector = {index: 1}
54
- built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
55
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
56
- "./*[local-name()='tfoot']/*[local-name()='tr'])[2]"}
57
-
58
- expect(selector_built).to eq built
59
- end
60
-
61
- it 'negative' do
62
- @selector = {index: -3}
63
- built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
64
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
65
- "./*[local-name()='tfoot']/*[local-name()='tr'])[last()-2]"}
66
-
67
- expect(selector_built).to eq built
68
- end
69
-
70
- it 'last' do
71
- @selector = {index: -1}
72
- built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
73
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
74
- "./*[local-name()='tfoot']/*[local-name()='tr'])[last()]"}
75
-
76
- expect(selector_built).to eq built
77
- end
78
-
79
- it 'does not return index if it is zero' do
80
- @selector = {index: 0}
81
- built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
82
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
83
- "./*[local-name()='tfoot']/*[local-name()='tr']"}
84
-
85
- expect(selector_built).to eq built
86
- end
87
-
88
- it 'raises exception when index is not an Integer', skip_after: true do
89
- @selector = {index: 'foo'}
90
- msg = /expected one of \[(Integer|Fixnum)\], got "foo":String/
91
- expect { selector_built }.to raise_exception TypeError, msg
92
- end
93
- end
94
-
95
- context 'with multiple locators' do
96
- it 'attribute and class' do
97
- @selector = {id: 'gregory', class: /brick/}
98
- built = {xpath: "./*[local-name()='tr'][contains(@class, \"brick\")][@id='gregory'] | " \
99
- "./*[local-name()='tbody']/*[local-name()='tr']" \
100
- "[contains(@class, \"brick\")][@id='gregory'] | " \
101
- "./*[local-name()='thead']/*[local-name()='tr']" \
102
- "[contains(@class, \"brick\")][@id='gregory'] | " \
103
- "./*[local-name()='tfoot']/*[local-name()='tr']" \
104
- "[contains(@class, \"brick\")][@id='gregory']"}
105
-
106
- expect(selector_built).to eq built
107
- end
108
- end
109
-
110
- context 'returns locators that can not be directly translated' do
111
- it 'any text value' do
112
- @selector = {text: 'Gregory'}
113
- built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
114
- "./*[local-name()='thead']/*[local-name()='tr'] | " \
115
- "./*[local-name()='tfoot']/*[local-name()='tr']", text: 'Gregory'}
116
-
117
- expect(selector_built).to eq built
5
+ module Watir
6
+ module Locators
7
+ class Row
8
+ describe SelectorBuilder do
9
+ include LocatorSpecHelper
10
+
11
+ let(:row_selector_builder) { described_class.new(attributes, query_scope) }
12
+ let(:selector_built) { row_selector_builder.build(selector).reject { |key| key == :scope } }
13
+ let(:selector) { @selector || {} }
14
+
15
+ describe '#build' do
16
+ context 'with query scopes' do
17
+ it 'with only table query scope' do
18
+ @query_scope = element(tag_name: 'table')
19
+
20
+ built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
21
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
22
+ "./*[local-name()='tfoot']/*[local-name()='tr']"}
23
+
24
+ expect(selector_built).to eq built
25
+ end
26
+
27
+ it 'with tbody query scope' do
28
+ @query_scope = element(tag_name: 'tbody')
29
+ built = {xpath: "./*[local-name()='tr']"}
30
+
31
+ expect(selector_built).to eq built
32
+ end
33
+
34
+ it 'with thead query scope' do
35
+ @query_scope = element(tag_name: 'thead')
36
+ built = {xpath: "./*[local-name()='tr']"}
37
+
38
+ expect(selector_built).to eq built
39
+ end
40
+
41
+ it 'with tfoot query scope' do
42
+ @query_scope = element(tag_name: 'tfoot')
43
+ built = {xpath: "./*[local-name()='tr']"}
44
+
45
+ expect(selector_built).to eq built
46
+ end
47
+ end
48
+
49
+ context 'when tag name is specified' do
50
+ before do
51
+ @query_scope = element(tag_name: 'table')
52
+ end
53
+
54
+ context 'when index' do
55
+ it 'positive' do
56
+ @selector = {index: 1}
57
+ built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
58
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
59
+ "./*[local-name()='tfoot']/*[local-name()='tr'])[2]"}
60
+
61
+ expect(selector_built).to eq built
62
+ end
63
+
64
+ it 'negative' do
65
+ @selector = {index: -3}
66
+ built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
67
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
68
+ "./*[local-name()='tfoot']/*[local-name()='tr'])[last()-2]"}
69
+
70
+ expect(selector_built).to eq built
71
+ end
72
+
73
+ it 'last' do
74
+ @selector = {index: -1}
75
+ built = {xpath: "(./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
76
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
77
+ "./*[local-name()='tfoot']/*[local-name()='tr'])[last()]"}
78
+
79
+ expect(selector_built).to eq built
80
+ end
81
+
82
+ it 'does not return index if it is zero' do
83
+ @selector = {index: 0}
84
+ built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
85
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
86
+ "./*[local-name()='tfoot']/*[local-name()='tr']"}
87
+
88
+ expect(selector_built).to eq built
89
+ end
90
+
91
+ it 'raises exception when index is not an Integer', skip_after: true do
92
+ @selector = {index: 'foo'}
93
+ msg = /expected one of \[(Integer|Fixnum)\], got "foo":String/
94
+ expect { selector_built }.to raise_exception TypeError, msg
95
+ end
96
+ end
97
+
98
+ context 'when multiple locators' do
99
+ it 'attribute and class' do
100
+ @selector = {id: 'gregory', class: /brick/}
101
+ built = {xpath: "./*[local-name()='tr'][contains(@class, \"brick\")][@id='gregory'] | " \
102
+ "./*[local-name()='tbody']/*[local-name()='tr']" \
103
+ "[contains(@class, \"brick\")][@id='gregory'] | " \
104
+ "./*[local-name()='thead']/*[local-name()='tr']" \
105
+ "[contains(@class, \"brick\")][@id='gregory'] | " \
106
+ "./*[local-name()='tfoot']/*[local-name()='tr']" \
107
+ "[contains(@class, \"brick\")][@id='gregory']"}
108
+
109
+ expect(selector_built).to eq built
110
+ end
111
+ end
112
+
113
+ context 'when a text value' do
114
+ it 'returns locators that can not be directly translated' do
115
+ @selector = {text: 'Gregory'}
116
+ built = {xpath: "./*[local-name()='tr'] | ./*[local-name()='tbody']/*[local-name()='tr'] | " \
117
+ "./*[local-name()='thead']/*[local-name()='tr'] | " \
118
+ "./*[local-name()='tfoot']/*[local-name()='tr']", text: 'Gregory'}
119
+
120
+ expect(selector_built).to eq built
121
+ end
122
+ end
123
+ end
118
124
  end
119
125
  end
120
126
  end