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,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