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,61 +2,63 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'TableBodies' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('tables.html'))
8
- end
9
-
10
- describe 'with selectors' do
11
- it 'returns the matching elements' do
12
- expect(browser.tbodys(id: 'first').to_a).to eq [browser.tbody(id: 'first')]
5
+ module Watir
6
+ describe 'TableBodies' do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('tables.html'))
13
9
  end
14
- end
15
10
 
16
- describe '#length' do
17
- it 'returns the correct number of table bodies (page context)' do
18
- expect(browser.tbodys.length).to eq 5
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.tbodys(id: 'first').to_a).to eq [browser.tbody(id: 'first')]
14
+ end
19
15
  end
20
16
 
21
- it 'returns the correct number of table bodies (table context)' do
22
- expect(browser.table(index: 0).tbodys.length).to eq 2
23
- end
24
- end
17
+ describe '#length' do
18
+ it 'returns the correct number of table bodies (page context)' do
19
+ expect(browser.tbodys.length).to eq 5
20
+ end
25
21
 
26
- describe '#[]' do
27
- it 'returns the row at the given index (page context)' do
28
- expect(browser.tbodys[0].id).to eq 'first'
22
+ it 'returns the correct number of table bodies (table context)' do
23
+ expect(browser.table(index: 0).tbodys.length).to eq 2
24
+ end
29
25
  end
30
26
 
31
- it 'returns the row at the given index (table context)' do
32
- expect(browser.table(index: 0).tbodys[0].id).to eq 'first'
27
+ describe '#[]' do
28
+ it 'returns the row at the given index (page context)' do
29
+ expect(browser.tbodys[0].id).to eq 'first'
30
+ end
31
+
32
+ it 'returns the row at the given index (table context)' do
33
+ expect(browser.table(index: 0).tbodys[0].id).to eq 'first'
34
+ end
33
35
  end
34
- end
35
36
 
36
- describe '#each' do
37
- it 'iterates through table bodies correctly (table context)' do
38
- count = 0
37
+ describe '#each' do
38
+ it 'iterates through table bodies correctly (browser context)' do
39
+ count = 0
39
40
 
40
- browser.tbodys.each_with_index do |body, index|
41
- expect(body.id).to eq browser.tbody(index: index).id
41
+ browser.tbodys.each_with_index do |body, index|
42
+ expect(body.id).to eq browser.tbody(index: index).id
42
43
 
43
- count += 1
44
+ count += 1
45
+ end
46
+
47
+ expect(count).to be > 0
44
48
  end
45
49
 
46
- expect(count).to be > 0
47
- end
50
+ it 'iterates through table bodies correctly (table context)' do
51
+ table = browser.table(index: 0)
52
+ count = 0
48
53
 
49
- it 'iterates through table bodies correctly (table context)' do
50
- table = browser.table(index: 0)
51
- count = 0
54
+ table.tbodys.each_with_index do |body, index|
55
+ expect(body.id).to eq table.tbody(index: index).id
52
56
 
53
- table.tbodys.each_with_index do |body, index|
54
- expect(body.id).to eq table.tbody(index: index).id
57
+ count += 1
58
+ end
55
59
 
56
- count += 1
60
+ expect(count).to be > 0
57
61
  end
58
-
59
- expect(count).to be > 0
60
62
  end
61
63
  end
62
64
  end
@@ -2,89 +2,91 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'TableCell' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('tables.html'))
8
- end
9
-
10
- # Exists
11
- describe '#exists?' do
12
- it 'returns true when the table cell exists' do
13
- expect(browser.td(id: 't1_r2_c1')).to exist
14
- expect(browser.td(id: /t1_r2_c1/)).to exist
15
- expect(browser.td(text: 'Table 1, Row 3, Cell 1')).to exist
16
- expect(browser.td(text: /Table 1/)).to exist
17
- expect(browser.td(index: 0)).to exist
18
- expect(browser.td(xpath: "//td[@id='t1_r2_c1']")).to exist
5
+ module Watir
6
+ describe TableDataCell do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('tables.html'))
19
9
  end
20
10
 
21
- it 'returns the first cell if given no args' do
22
- expect(browser.td).to exist
23
- end
11
+ # Exists
12
+ describe '#exists?' do
13
+ it 'returns true when the table cell exists' do
14
+ expect(browser.td(id: 't1_r2_c1')).to exist
15
+ expect(browser.td(id: /t1_r2_c1/)).to exist
16
+ expect(browser.td(text: 'Table 1, Row 3, Cell 1')).to exist
17
+ expect(browser.td(text: /Table 1/)).to exist
18
+ expect(browser.td(index: 0)).to exist
19
+ expect(browser.td(xpath: "//td[@id='t1_r2_c1']")).to exist
20
+ end
24
21
 
25
- it 'returns false when the table cell does not exist' do
26
- expect(browser.td(id: 'no_such_id')).to_not exist
27
- expect(browser.td(id: /no_such_id/)).to_not exist
28
- expect(browser.td(text: 'no_such_text')).to_not exist
29
- expect(browser.td(text: /no_such_text/)).to_not exist
30
- expect(browser.td(index: 1337)).to_not exist
31
- expect(browser.td(xpath: "//td[@id='no_such_id']")).to_not exist
32
- end
22
+ it 'returns the first cell if given no args' do
23
+ expect(browser.td).to exist
24
+ end
25
+
26
+ it 'returns false when the table cell does not exist' do
27
+ expect(browser.td(id: 'no_such_id')).not_to exist
28
+ expect(browser.td(id: /no_such_id/)).not_to exist
29
+ expect(browser.td(text: 'no_such_text')).not_to exist
30
+ expect(browser.td(text: /no_such_text/)).not_to exist
31
+ expect(browser.td(index: 1337)).not_to exist
32
+ expect(browser.td(xpath: "//td[@id='no_such_id']")).not_to exist
33
+ end
33
34
 
34
- it "raises TypeError when 'what' argument is invalid" do
35
- expect { browser.td(id: 3.14).exists? }.to raise_error(TypeError)
35
+ it "raises TypeError when 'what' argument is invalid" do
36
+ expect { browser.td(id: 3.14).exists? }.to raise_error(TypeError)
37
+ end
36
38
  end
37
- end
38
39
 
39
- describe '#click' do
40
- it "fires the table's onclick event" do
41
- browser.td(id: 't2_r1_c1').click
42
- expect(messages).to include('td')
40
+ describe '#click' do
41
+ it "fires the table's onclick event" do
42
+ browser.td(id: 't2_r1_c1').click
43
+ expect(messages).to include('td')
44
+ end
43
45
  end
44
- end
45
46
 
46
- # Attribute methods
47
- describe '#text', except: {browser: :safari, reason: 'Safari does not strip text'} do
48
- it 'returns the text inside the table cell' do
49
- expect(browser.td(id: 't1_r2_c1').text).to eq 'Table 1, Row 2, Cell 1'
50
- expect(browser.td(id: 't2_r1_c1').text).to eq 'Table 2, Row 1, Cell 1'
47
+ # Attribute methods
48
+ describe '#text', except: {browser: :safari, reason: 'Safari does not strip text'} do
49
+ it 'returns the text inside the table cell' do
50
+ expect(browser.td(id: 't1_r2_c1').text).to eq 'Table 1, Row 2, Cell 1'
51
+ expect(browser.td(id: 't2_r1_c1').text).to eq 'Table 2, Row 1, Cell 1'
52
+ end
51
53
  end
52
- end
53
54
 
54
- describe '#colspan' do
55
- it 'gets the colspan attribute' do
56
- expect(browser.td(id: 'colspan_2').colspan).to eq 2
57
- expect(browser.td(id: 'no_colspan').colspan).to eq 1
55
+ describe '#colspan' do
56
+ it 'gets the colspan attribute' do
57
+ expect(browser.td(id: 'colspan_2').colspan).to eq 2
58
+ expect(browser.td(id: 'no_colspan').colspan).to eq 1
59
+ end
58
60
  end
59
- end
60
61
 
61
- describe '#respond_to?' do
62
- it 'returns true for all attribute methods' do
63
- expect(browser.td(index: 0)).to respond_to(:text)
64
- expect(browser.td(index: 0)).to respond_to(:colspan)
62
+ describe '#respond_to?' do
63
+ it 'returns true for all attribute methods' do
64
+ expect(browser.td(index: 0)).to respond_to(:text)
65
+ expect(browser.td(index: 0)).to respond_to(:colspan)
66
+ end
65
67
  end
66
- end
67
68
 
68
- describe '#column_header' do
69
- it 'returns the corresponding column header' do
70
- header = browser.td(text: '1 331').column_header
71
- expect(header).to eq 'Income tax'
69
+ describe '#column_header' do
70
+ it 'returns the corresponding column header' do
71
+ header = browser.td(text: '1 331').column_header
72
+ expect(header).to eq 'Income tax'
73
+ end
72
74
  end
73
- end
74
75
 
75
- describe '#sibling_from_header' do
76
- it 'returns the corresponding sibling cell by text' do
77
- local_td = browser.td(text: '1 331')
76
+ describe '#sibling_from_header' do
77
+ it 'returns the corresponding sibling cell by text' do
78
+ local_td = browser.td(text: '1 331')
78
79
 
79
- td = local_td.sibling_from_header(text: 'After income tax')
80
- expect(td.text).to eq '4 532'
81
- end
80
+ td = local_td.sibling_from_header(text: 'After income tax')
81
+ expect(td.text).to eq '4 532'
82
+ end
82
83
 
83
- it 'returns the corresponding sibling cell by index' do
84
- local_td = browser.td(text: '1 331')
84
+ it 'returns the corresponding sibling cell by index' do
85
+ local_td = browser.td(text: '1 331')
85
86
 
86
- td = local_td.sibling_from_header(text: /tax/, index: 2)
87
- expect(td.text).to eq '4 532'
87
+ td = local_td.sibling_from_header(text: /tax/, index: 2)
88
+ expect(td.text).to eq '4 532'
89
+ end
88
90
  end
89
91
  end
90
92
  end
@@ -2,51 +2,53 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'TableCells' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('tables.html'))
8
- end
9
-
10
- describe 'with selectors' do
11
- it 'returns the matching elements' do
12
- expect(browser.tds(headers: 'before_tax').to_a).to eq [browser.td(headers: 'before_tax')]
5
+ module Watir
6
+ describe TableDataCellCollection do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('tables.html'))
13
9
  end
14
- end
15
10
 
16
- # describe "#length" do
17
- # it "returns the number of cells" do
18
- # browser.table(id: 'outer').cells.length.to eq 6
19
- # browser.table(id: 'inner').cells.length.to eq 2
20
- # end
21
- # end
22
- #
23
- # describe "#[]" do
24
- # it "returns the row at the given index" do
25
- # browser.table(id: 'outer').cells[0].text.to eq "Table 1, Row 1, Cell 1"
26
- # browser.table(id: 'inner').cells[0].text.to eq "Table 2, Row 1, Cell 1"
27
- # browser.table(id: 'outer').cells[6].text.to eq "Table 1, Row 3, Cell 2"
28
- # end
29
- # end
30
-
31
- describe '#each' do
32
- it 'iterates through all cells on the page correctly' do
33
- count = 0
34
-
35
- browser.tds.each_with_index do |c, index|
36
- expect(c.id).to eq browser.td(index: index).id
37
- count += 1
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.tds(headers: 'before_tax').to_a).to eq [browser.td(headers: 'before_tax')]
38
14
  end
39
-
40
- expect(count).to be > 0
41
15
  end
42
16
 
43
- it 'iterates through cells inside a table' do
44
- count = 0
17
+ # describe "#length" do
18
+ # it "returns the number of cells" do
19
+ # browser.table(id: 'outer').cells.length.to eq 6
20
+ # browser.table(id: 'inner').cells.length.to eq 2
21
+ # end
22
+ # end
23
+ #
24
+ # describe "#[]" do
25
+ # it "returns the row at the given index" do
26
+ # browser.table(id: 'outer').cells[0].text.to eq "Table 1, Row 1, Cell 1"
27
+ # browser.table(id: 'inner').cells[0].text.to eq "Table 2, Row 1, Cell 1"
28
+ # browser.table(id: 'outer').cells[6].text.to eq "Table 1, Row 3, Cell 2"
29
+ # end
30
+ # end
31
+
32
+ describe '#each' do
33
+ it 'iterates through all cells on the page correctly' do
34
+ count = 0
35
+
36
+ browser.tds.each_with_index do |c, index|
37
+ expect(c.id).to eq browser.td(index: index).id
38
+ count += 1
39
+ end
40
+
41
+ expect(count).to be > 0
42
+ end
43
+
44
+ it 'iterates through cells inside a table' do
45
+ count = 0
45
46
 
46
- inner_table = browser.table(id: 'inner')
47
- inner_table.tds.each_with_index do |c, index|
48
- expect(c.id).to eq inner_table.td(index: index).id
49
- count += 1
47
+ inner_table = browser.table(id: 'inner')
48
+ inner_table.tds.each_with_index do |c, index|
49
+ expect(c.id).to eq inner_table.td(index: index).id
50
+ count += 1
51
+ end
50
52
  end
51
53
  end
52
54
  end