watir 7.2.0 → 7.2.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.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +1 -1
  3. data/.github/workflows/edge.yml +1 -1
  4. data/.github/workflows/firefox.yml +1 -1
  5. data/.github/workflows/ie.yml +1 -1
  6. data/.github/workflows/safari.yml +1 -1
  7. data/.github/workflows/unit.yml +1 -1
  8. data/.rubocop.yml +25 -12
  9. data/.rubocop_todo.yml +8 -1
  10. data/CHANGES.md +6 -1
  11. data/LICENSE +2 -2
  12. data/lib/watir/capabilities.rb +1 -1
  13. data/lib/watir/locators/anchor/selector_builder.rb +3 -0
  14. data/lib/watir/locators/element/matcher.rb +2 -1
  15. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -1
  16. data/lib/watir/locators/text_field/matcher.rb +0 -4
  17. data/lib/watir/version.rb +1 -1
  18. data/spec/locator_spec_helper.rb +0 -8
  19. data/spec/unit/capabilities_spec.rb +553 -561
  20. data/spec/unit/element_locator_spec.rb +89 -78
  21. data/spec/unit/match_elements/button_spec.rb +69 -62
  22. data/spec/unit/match_elements/element_spec.rb +303 -309
  23. data/spec/unit/match_elements/text_field_spec.rb +76 -73
  24. data/spec/unit/selector_builder/anchor_spec.rb +39 -33
  25. data/spec/unit/selector_builder/button_spec.rb +209 -202
  26. data/spec/unit/selector_builder/cell_spec.rb +48 -42
  27. data/spec/unit/selector_builder/element_spec.rb +634 -627
  28. data/spec/unit/selector_builder/row_spec.rb +119 -113
  29. data/spec/unit/selector_builder/text_field_spec.rb +195 -188
  30. data/spec/unit/selector_builder/textarea_spec.rb +22 -14
  31. data/spec/unit/wait_spec.rb +85 -81
  32. data/spec/watirspec/adjacent_spec.rb +249 -247
  33. data/spec/watirspec/after_hooks_spec.rb +161 -159
  34. data/spec/watirspec/alert_spec.rb +61 -58
  35. data/spec/watirspec/browser_spec.rb +409 -409
  36. data/spec/watirspec/capabilities_spec.rb +89 -99
  37. data/spec/watirspec/cookies_spec.rb +120 -118
  38. data/spec/watirspec/drag_and_drop_spec.rb +26 -24
  39. data/spec/watirspec/element_hidden_spec.rb +66 -60
  40. data/spec/watirspec/elements/area_spec.rb +49 -47
  41. data/spec/watirspec/elements/areas_spec.rb +27 -25
  42. data/spec/watirspec/elements/button_spec.rb +253 -251
  43. data/spec/watirspec/elements/buttons_spec.rb +36 -34
  44. data/spec/watirspec/elements/checkbox_spec.rb +48 -36
  45. data/spec/watirspec/elements/checkboxes_spec.rb +29 -27
  46. data/spec/watirspec/elements/collections_spec.rb +126 -119
  47. data/spec/watirspec/elements/date_field_spec.rb +185 -183
  48. data/spec/watirspec/elements/date_fields_spec.rb +29 -27
  49. data/spec/watirspec/elements/date_time_field_spec.rb +197 -195
  50. data/spec/watirspec/elements/date_time_fields_spec.rb +30 -28
  51. data/spec/watirspec/elements/dd_spec.rb +87 -85
  52. data/spec/watirspec/elements/dds_spec.rb +27 -25
  53. data/spec/watirspec/elements/del_spec.rb +106 -104
  54. data/spec/watirspec/elements/dels_spec.rb +26 -24
  55. data/spec/watirspec/elements/div_spec.rb +225 -221
  56. data/spec/watirspec/elements/divs_spec.rb +37 -35
  57. data/spec/watirspec/elements/dl_spec.rb +110 -108
  58. data/spec/watirspec/elements/dls_spec.rb +28 -26
  59. data/spec/watirspec/elements/dt_spec.rb +86 -84
  60. data/spec/watirspec/elements/dts_spec.rb +27 -25
  61. data/spec/watirspec/elements/element_spec.rb +794 -775
  62. data/spec/watirspec/elements/elements_spec.rb +40 -38
  63. data/spec/watirspec/elements/em_spec.rb +62 -60
  64. data/spec/watirspec/elements/ems_spec.rb +28 -26
  65. data/spec/watirspec/elements/filefield_spec.rb +116 -114
  66. data/spec/watirspec/elements/filefields_spec.rb +28 -26
  67. data/spec/watirspec/elements/font_spec.rb +20 -18
  68. data/spec/watirspec/elements/form_spec.rb +51 -49
  69. data/spec/watirspec/elements/forms_spec.rb +29 -27
  70. data/spec/watirspec/elements/frame_spec.rb +89 -87
  71. data/spec/watirspec/elements/frames_spec.rb +27 -25
  72. data/spec/watirspec/elements/hidden_spec.rb +81 -79
  73. data/spec/watirspec/elements/hiddens_spec.rb +28 -26
  74. data/spec/watirspec/elements/hn_spec.rb +59 -57
  75. data/spec/watirspec/elements/hns_spec.rb +26 -24
  76. data/spec/watirspec/elements/iframe_spec.rb +195 -191
  77. data/spec/watirspec/elements/iframes_spec.rb +31 -29
  78. data/spec/watirspec/elements/image_spec.rb +148 -146
  79. data/spec/watirspec/elements/images_spec.rb +26 -24
  80. data/spec/watirspec/elements/input_spec.rb +9 -7
  81. data/spec/watirspec/elements/ins_spec.rb +106 -104
  82. data/spec/watirspec/elements/inses_spec.rb +26 -24
  83. data/spec/watirspec/elements/label_spec.rb +56 -54
  84. data/spec/watirspec/elements/labels_spec.rb +26 -24
  85. data/spec/watirspec/elements/li_spec.rb +76 -74
  86. data/spec/watirspec/elements/link_spec.rb +173 -177
  87. data/spec/watirspec/elements/links_spec.rb +45 -43
  88. data/spec/watirspec/elements/lis_spec.rb +27 -25
  89. data/spec/watirspec/elements/list_spec.rb +44 -42
  90. data/spec/watirspec/elements/map_spec.rb +57 -55
  91. data/spec/watirspec/elements/maps_spec.rb +27 -25
  92. data/spec/watirspec/elements/meta_spec.rb +16 -14
  93. data/spec/watirspec/elements/metas_spec.rb +26 -24
  94. data/spec/watirspec/elements/ol_spec.rb +56 -65
  95. data/spec/watirspec/elements/ols_spec.rb +26 -24
  96. data/spec/watirspec/elements/option_spec.rb +91 -89
  97. data/spec/watirspec/elements/p_spec.rb +81 -79
  98. data/spec/watirspec/elements/pre_spec.rb +77 -75
  99. data/spec/watirspec/elements/pres_spec.rb +26 -24
  100. data/spec/watirspec/elements/ps_spec.rb +26 -24
  101. data/spec/watirspec/elements/radio_spec.rb +251 -249
  102. data/spec/watirspec/elements/radios_spec.rb +28 -26
  103. data/spec/watirspec/elements/select_list_spec.rb +537 -526
  104. data/spec/watirspec/elements/select_lists_spec.rb +32 -30
  105. data/spec/watirspec/elements/span_spec.rb +112 -110
  106. data/spec/watirspec/elements/spans_spec.rb +26 -24
  107. data/spec/watirspec/elements/strong_spec.rb +58 -58
  108. data/spec/watirspec/elements/strongs_spec.rb +28 -26
  109. data/spec/watirspec/elements/table_spec.rb +192 -139
  110. data/spec/watirspec/elements/tables_spec.rb +28 -26
  111. data/spec/watirspec/elements/tbody_spec.rb +74 -72
  112. data/spec/watirspec/elements/tbodys_spec.rb +40 -38
  113. data/spec/watirspec/elements/td_spec.rb +66 -64
  114. data/spec/watirspec/elements/tds_spec.rb +41 -39
  115. data/spec/watirspec/elements/text_field_spec.rb +206 -204
  116. data/spec/watirspec/elements/text_fields_spec.rb +30 -28
  117. data/spec/watirspec/elements/textarea_spec.rb +20 -18
  118. data/spec/watirspec/elements/textareas_spec.rb +18 -16
  119. data/spec/watirspec/elements/tfoot_spec.rb +65 -63
  120. data/spec/watirspec/elements/tfoots_spec.rb +42 -40
  121. data/spec/watirspec/elements/thead_spec.rb +65 -63
  122. data/spec/watirspec/elements/theads_spec.rb +42 -40
  123. data/spec/watirspec/elements/tr_spec.rb +48 -46
  124. data/spec/watirspec/elements/trs_spec.rb +42 -40
  125. data/spec/watirspec/elements/ul_spec.rb +56 -54
  126. data/spec/watirspec/elements/uls_spec.rb +26 -24
  127. data/spec/watirspec/radio_set_spec.rb +269 -267
  128. data/spec/watirspec/screenshot_spec.rb +20 -18
  129. data/spec/watirspec/scroll_spec.rb +152 -148
  130. data/spec/watirspec/shadow_root_spec.rb +86 -83
  131. data/spec/watirspec/user_editable_spec.rb +200 -198
  132. data/spec/watirspec/wait_spec.rb +289 -295
  133. data/spec/watirspec/window_switching_spec.rb +422 -434
  134. data/spec/watirspec_helper.rb +1 -23
  135. data/watir.gemspec +5 -4
  136. metadata +44 -33
  137. data/spec/watirspec/attributes_spec.rb +0 -18
  138. data/spec/watirspec/elements/table_nesting_spec.rb +0 -51
  139. data/spec/watirspec/special_chars_spec.rb +0 -23
@@ -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