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,80 +2,83 @@
2
2
 
3
3
  require_relative '../unit_helper'
4
4
 
5
- describe Watir::Locators::TextField::Matcher do
6
- include LocatorSpecHelper
7
-
8
- let(:query_scope) { @query_scope || double(Watir::Browser) }
9
- let(:matcher) { described_class.new(query_scope, @selector) }
10
-
11
- describe '#match?' do
12
- context 'when input element' do
13
- it 'converts text to value' do
14
- elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}),
15
- wd_element(tag_name: 'input', attributes: {value: 'Foob'})]
16
- values_to_match = {text: 'Foob'}
17
-
18
- expect(elements[0]).not_to receive(:text)
19
- expect(elements[1]).not_to receive(:text)
20
-
21
- expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
22
- end
23
-
24
- it 'converts label to value' do
25
- elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}),
26
- wd_element(tag_name: 'input', attributes: {value: 'Foob'})]
27
- values_to_match = {label: 'Foob'}
28
-
29
- expect(elements[0]).not_to receive(:attribute).with(values_to_match)
30
- expect(elements[1]).not_to receive(:attribute).with(values_to_match)
31
-
32
- expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
33
- end
34
-
35
- it 'converts visible_text to value' do
36
- elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}),
37
- wd_element(tag_name: 'input', attributes: {value: 'Foob'})]
38
- values_to_match = {visible_text: 'Foob'}
39
-
40
- expect(elements[0]).not_to receive(:attribute).with(values_to_match)
41
- expect(elements[1]).not_to receive(:attribute).with(values_to_match)
42
-
43
- expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
5
+ module Watir
6
+ module Locators
7
+ class TextField
8
+ describe Matcher do
9
+ include LocatorSpecHelper
10
+
11
+ let(:query_scope) { @query_scope || instance_double(Watir::Browser) }
12
+ let(:matcher) { described_class.new(query_scope, @selector) }
13
+
14
+ describe '#match?' do
15
+ context 'when input element' do
16
+ it 'converts text to value' do
17
+ elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}, text: nil),
18
+ wd_element(tag_name: 'input', attributes: {value: 'Foob'}, text: nil)]
19
+ values_to_match = {text: 'Foob'}
20
+
21
+ expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
22
+ expect(elements[0]).not_to have_received(:text)
23
+ expect(elements[1]).not_to have_received(:text)
24
+ end
25
+
26
+ it 'converts label to value' do
27
+ elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}),
28
+ wd_element(tag_name: 'input', attributes: {value: 'Foob'})]
29
+ values_to_match = {label: 'Foob'}
30
+
31
+ expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
32
+ expect(elements[0]).not_to have_received(:attribute).with(values_to_match)
33
+ expect(elements[1]).not_to have_received(:attribute).with(values_to_match)
34
+ end
35
+
36
+ it 'converts visible_text to value' do
37
+ elements = [wd_element(tag_name: 'input', attributes: {value: 'foo'}),
38
+ wd_element(tag_name: 'input', attributes: {value: 'Foob'})]
39
+ values_to_match = {visible_text: 'Foob'}
40
+
41
+ expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
42
+ expect(elements[0]).not_to have_received(:attribute).with(values_to_match)
43
+ expect(elements[1]).not_to have_received(:attribute).with(values_to_match)
44
+ end
45
+ end
46
+
47
+ context 'when label element' do
48
+ it 'converts value to text' do
49
+ elements = [wd_element(tag_name: 'label', attribute: nil),
50
+ wd_element(tag_name: 'label', attribute: nil)]
51
+ values_to_match = {value: 'Foob'}
52
+
53
+ allow(query_scope).to receive(:execute_script).and_return('foo', 'Foob')
54
+ expect(elements[0]).not_to have_received(:attribute)
55
+ expect(elements[1]).not_to have_received(:attribute)
56
+
57
+ expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
58
+ end
59
+
60
+ it 'converts label to text' do
61
+ elements = [wd_element(tag_name: 'label', attribute: nil),
62
+ wd_element(tag_name: 'label', attribute: nil)]
63
+ values_to_match = {label: 'Foob'}
64
+
65
+ allow(query_scope).to receive(:execute_script).and_return('foo', 'Foob')
66
+
67
+ expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
68
+ expect(elements[0]).not_to have_received(:attribute)
69
+ expect(elements[1]).not_to have_received(:attribute)
70
+ end
71
+ end
72
+
73
+ it 'returns empty array if element is not an input' do
74
+ elements = [wd_element(tag_name: 'wrong', text: 'foob', attributes: {value: 'foo'}),
75
+ wd_element(tag_name: 'wrong', text: 'bar', attributes: {value: 'bar'})]
76
+ values_to_match = {tag_name: 'input', value: 'foo'}
77
+
78
+ expect(matcher.match(elements, values_to_match, :all)).to eq []
79
+ end
80
+ end
44
81
  end
45
82
  end
46
-
47
- context 'when label element' do
48
- it 'converts value to text' do
49
- elements = [wd_element(tag_name: 'label'),
50
- wd_element(tag_name: 'label')]
51
- values_to_match = {value: 'Foob'}
52
-
53
- allow(query_scope).to receive(:execute_script).and_return('foo', 'Foob')
54
- expect(elements[0]).not_to receive(:attribute).with(values_to_match)
55
- expect(elements[1]).not_to receive(:attribute).with(values_to_match)
56
-
57
- expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
58
- end
59
-
60
- it 'converts label to text' do
61
- elements = [wd_element(tag_name: 'label'),
62
- wd_element(tag_name: 'label')]
63
- values_to_match = {label: 'Foob'}
64
-
65
- allow(query_scope).to receive(:execute_script).and_return('foo', 'Foob')
66
- expect(elements[0]).not_to receive(:attribute).with(values_to_match)
67
- expect(elements[1]).not_to receive(:attribute).with(values_to_match)
68
-
69
- expect(matcher.match(elements, values_to_match, :all)).to eq [elements[1]]
70
- end
71
- end
72
-
73
- it 'returns empty array if element is not an input' do
74
- elements = [wd_element(tag_name: 'wrong', text: 'foob', attributes: {value: 'foo'}),
75
- wd_element(tag_name: 'wrong', text: 'bar', attributes: {value: 'bar'})]
76
- values_to_match = {tag_name: 'input', value: 'foo'}
77
-
78
- expect(matcher.match(elements, values_to_match, :all)).to eq []
79
- end
80
83
  end
81
84
  end
@@ -2,52 +2,58 @@
2
2
 
3
3
  require_relative '../unit_helper'
4
4
 
5
- describe Watir::Locators::Anchor::SelectorBuilder do
6
- include LocatorSpecHelper
5
+ module Watir
6
+ module Locators
7
+ class Anchor
8
+ describe SelectorBuilder do
9
+ include LocatorSpecHelper
7
10
 
8
- let(:selector_builder) { described_class.new(attributes, query_scope) }
11
+ let(:selector_builder) { described_class.new(attributes, query_scope) }
9
12
 
10
- describe '#build' do
11
- it 'without only tag name' do
12
- selector = {tag_name: 'a'}
13
- built = {xpath: ".//*[local-name()='a']"}
13
+ describe '#build' do
14
+ it 'without only tag name' do
15
+ selector = {tag_name: 'a'}
16
+ built = {xpath: ".//*[local-name()='a']"}
14
17
 
15
- expect(selector_builder.build(selector)).to eq built
16
- end
18
+ expect(selector_builder.build(selector)).to eq built
19
+ end
17
20
 
18
- it 'converts visible_text String to link_text' do
19
- selector = {tag_name: 'a', visible_text: 'Foo'}
20
- built = {link_text: 'Foo'}
21
+ it 'converts visible_text String to link_text' do
22
+ selector = {tag_name: 'a', visible_text: 'Foo'}
23
+ built = {link_text: 'Foo'}
21
24
 
22
- expect(selector_builder.build(selector)).to eq built
23
- end
25
+ expect(selector_builder.build(selector)).to eq built
26
+ end
24
27
 
25
- it 'converts visible_text Regexp to partial_link_text' do
26
- selector = {tag_name: 'a', visible_text: /Foo/}
27
- built = {partial_link_text: 'Foo'}
28
+ it 'converts visible_text Regexp to partial_link_text' do
29
+ selector = {tag_name: 'a', visible_text: /Foo/}
30
+ built = {partial_link_text: 'Foo'}
28
31
 
29
- expect(selector_builder.build(selector)).to eq built
30
- end
32
+ expect(selector_builder.build(selector)).to eq built
33
+ end
31
34
 
32
- it 'does not convert visible_text with casefold Regexp to partial_link_text' do
33
- selector = {tag_name: 'a', visible_text: /partial text/i}
34
- built = {xpath: ".//*[local-name()='a']", visible_text: /partial text/i}
35
+ it 'does not convert visible_text with casefold Regexp to partial_link_text' do
36
+ selector = {tag_name: 'a', visible_text: /partial text/i}
37
+ built = {xpath: ".//*[local-name()='a']", visible_text: /partial text/i}
35
38
 
36
- expect(selector_builder.build(selector)).to eq built
37
- end
39
+ expect(selector_builder.build(selector)).to eq built
40
+ end
38
41
 
39
- it 'does not convert :visible_text with String and other locators' do
40
- selector = {tag_name: 'a', visible_text: 'Foo', id: 'Foo'}
41
- built = {xpath: ".//*[local-name()='a'][@id='Foo']", visible_text: 'Foo'}
42
+ it 'does not convert :visible_text with String and other locators' do
43
+ selector = {tag_name: 'a', visible_text: 'Foo', id: 'Foo'}
44
+ built = {xpath: ".//*[local-name()='a'][@id='Foo']", visible_text: 'Foo'}
42
45
 
43
- expect(selector_builder.build(selector)).to eq built
44
- end
46
+ expect(selector_builder.build(selector)).to eq built
47
+ end
45
48
 
46
- it 'does not convert :visible_text with Regexp and other locators' do
47
- selector = {tag_name: 'a', visible_text: /Foo/, id: 'Foo'}
48
- built = {xpath: ".//*[local-name()='a'][@id='Foo']", visible_text: /Foo/}
49
+ it 'does not convert :visible_text with Regexp and other locators' do
50
+ selector = {tag_name: 'a', visible_text: /Foo/, id: 'Foo'}
51
+ built = {xpath: ".//*[local-name()='a'][@id='Foo']", visible_text: /Foo/}
49
52
 
50
- expect(selector_builder.build(selector)).to eq built
53
+ expect(selector_builder.build(selector)).to eq built
54
+ end
55
+ end
56
+ end
51
57
  end
52
58
  end
53
59
  end