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.
- checksums.yaml +4 -4
- data/.github/workflows/chrome.yml +1 -1
- data/.github/workflows/edge.yml +1 -1
- data/.github/workflows/firefox.yml +1 -1
- data/.github/workflows/ie.yml +1 -1
- data/.github/workflows/safari.yml +1 -1
- data/.github/workflows/unit.yml +1 -1
- data/.rubocop.yml +25 -12
- data/.rubocop_todo.yml +8 -1
- data/CHANGES.md +6 -1
- data/LICENSE +2 -2
- data/lib/watir/capabilities.rb +1 -1
- data/lib/watir/locators/anchor/selector_builder.rb +3 -0
- data/lib/watir/locators/element/matcher.rb +2 -1
- data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -1
- data/lib/watir/locators/text_field/matcher.rb +0 -4
- data/lib/watir/version.rb +1 -1
- data/spec/locator_spec_helper.rb +0 -8
- data/spec/unit/capabilities_spec.rb +553 -561
- data/spec/unit/element_locator_spec.rb +89 -78
- data/spec/unit/match_elements/button_spec.rb +69 -62
- data/spec/unit/match_elements/element_spec.rb +303 -309
- data/spec/unit/match_elements/text_field_spec.rb +76 -73
- data/spec/unit/selector_builder/anchor_spec.rb +39 -33
- data/spec/unit/selector_builder/button_spec.rb +209 -202
- data/spec/unit/selector_builder/cell_spec.rb +48 -42
- data/spec/unit/selector_builder/element_spec.rb +634 -627
- data/spec/unit/selector_builder/row_spec.rb +119 -113
- data/spec/unit/selector_builder/text_field_spec.rb +195 -188
- data/spec/unit/selector_builder/textarea_spec.rb +22 -14
- data/spec/unit/wait_spec.rb +85 -81
- data/spec/watirspec/adjacent_spec.rb +249 -247
- data/spec/watirspec/after_hooks_spec.rb +161 -159
- data/spec/watirspec/alert_spec.rb +61 -58
- data/spec/watirspec/browser_spec.rb +409 -409
- data/spec/watirspec/capabilities_spec.rb +89 -99
- data/spec/watirspec/cookies_spec.rb +120 -118
- data/spec/watirspec/drag_and_drop_spec.rb +26 -24
- data/spec/watirspec/element_hidden_spec.rb +66 -60
- data/spec/watirspec/elements/area_spec.rb +49 -47
- data/spec/watirspec/elements/areas_spec.rb +27 -25
- data/spec/watirspec/elements/button_spec.rb +253 -251
- data/spec/watirspec/elements/buttons_spec.rb +36 -34
- data/spec/watirspec/elements/checkbox_spec.rb +48 -36
- data/spec/watirspec/elements/checkboxes_spec.rb +29 -27
- data/spec/watirspec/elements/collections_spec.rb +126 -119
- data/spec/watirspec/elements/date_field_spec.rb +185 -183
- data/spec/watirspec/elements/date_fields_spec.rb +29 -27
- data/spec/watirspec/elements/date_time_field_spec.rb +197 -195
- data/spec/watirspec/elements/date_time_fields_spec.rb +30 -28
- data/spec/watirspec/elements/dd_spec.rb +87 -85
- data/spec/watirspec/elements/dds_spec.rb +27 -25
- data/spec/watirspec/elements/del_spec.rb +106 -104
- data/spec/watirspec/elements/dels_spec.rb +26 -24
- data/spec/watirspec/elements/div_spec.rb +225 -221
- data/spec/watirspec/elements/divs_spec.rb +37 -35
- data/spec/watirspec/elements/dl_spec.rb +110 -108
- data/spec/watirspec/elements/dls_spec.rb +28 -26
- data/spec/watirspec/elements/dt_spec.rb +86 -84
- data/spec/watirspec/elements/dts_spec.rb +27 -25
- data/spec/watirspec/elements/element_spec.rb +794 -775
- data/spec/watirspec/elements/elements_spec.rb +40 -38
- data/spec/watirspec/elements/em_spec.rb +62 -60
- data/spec/watirspec/elements/ems_spec.rb +28 -26
- data/spec/watirspec/elements/filefield_spec.rb +116 -114
- data/spec/watirspec/elements/filefields_spec.rb +28 -26
- data/spec/watirspec/elements/font_spec.rb +20 -18
- data/spec/watirspec/elements/form_spec.rb +51 -49
- data/spec/watirspec/elements/forms_spec.rb +29 -27
- data/spec/watirspec/elements/frame_spec.rb +89 -87
- data/spec/watirspec/elements/frames_spec.rb +27 -25
- data/spec/watirspec/elements/hidden_spec.rb +81 -79
- data/spec/watirspec/elements/hiddens_spec.rb +28 -26
- data/spec/watirspec/elements/hn_spec.rb +59 -57
- data/spec/watirspec/elements/hns_spec.rb +26 -24
- data/spec/watirspec/elements/iframe_spec.rb +195 -191
- data/spec/watirspec/elements/iframes_spec.rb +31 -29
- data/spec/watirspec/elements/image_spec.rb +148 -146
- data/spec/watirspec/elements/images_spec.rb +26 -24
- data/spec/watirspec/elements/input_spec.rb +9 -7
- data/spec/watirspec/elements/ins_spec.rb +106 -104
- data/spec/watirspec/elements/inses_spec.rb +26 -24
- data/spec/watirspec/elements/label_spec.rb +56 -54
- data/spec/watirspec/elements/labels_spec.rb +26 -24
- data/spec/watirspec/elements/li_spec.rb +76 -74
- data/spec/watirspec/elements/link_spec.rb +173 -177
- data/spec/watirspec/elements/links_spec.rb +45 -43
- data/spec/watirspec/elements/lis_spec.rb +27 -25
- data/spec/watirspec/elements/list_spec.rb +44 -42
- data/spec/watirspec/elements/map_spec.rb +57 -55
- data/spec/watirspec/elements/maps_spec.rb +27 -25
- data/spec/watirspec/elements/meta_spec.rb +16 -14
- data/spec/watirspec/elements/metas_spec.rb +26 -24
- data/spec/watirspec/elements/ol_spec.rb +56 -65
- data/spec/watirspec/elements/ols_spec.rb +26 -24
- data/spec/watirspec/elements/option_spec.rb +91 -89
- data/spec/watirspec/elements/p_spec.rb +81 -79
- data/spec/watirspec/elements/pre_spec.rb +77 -75
- data/spec/watirspec/elements/pres_spec.rb +26 -24
- data/spec/watirspec/elements/ps_spec.rb +26 -24
- data/spec/watirspec/elements/radio_spec.rb +251 -249
- data/spec/watirspec/elements/radios_spec.rb +28 -26
- data/spec/watirspec/elements/select_list_spec.rb +537 -526
- data/spec/watirspec/elements/select_lists_spec.rb +32 -30
- data/spec/watirspec/elements/span_spec.rb +112 -110
- data/spec/watirspec/elements/spans_spec.rb +26 -24
- data/spec/watirspec/elements/strong_spec.rb +58 -58
- data/spec/watirspec/elements/strongs_spec.rb +28 -26
- data/spec/watirspec/elements/table_spec.rb +192 -139
- data/spec/watirspec/elements/tables_spec.rb +28 -26
- data/spec/watirspec/elements/tbody_spec.rb +74 -72
- data/spec/watirspec/elements/tbodys_spec.rb +40 -38
- data/spec/watirspec/elements/td_spec.rb +66 -64
- data/spec/watirspec/elements/tds_spec.rb +41 -39
- data/spec/watirspec/elements/text_field_spec.rb +206 -204
- data/spec/watirspec/elements/text_fields_spec.rb +30 -28
- data/spec/watirspec/elements/textarea_spec.rb +20 -18
- data/spec/watirspec/elements/textareas_spec.rb +18 -16
- data/spec/watirspec/elements/tfoot_spec.rb +65 -63
- data/spec/watirspec/elements/tfoots_spec.rb +42 -40
- data/spec/watirspec/elements/thead_spec.rb +65 -63
- data/spec/watirspec/elements/theads_spec.rb +42 -40
- data/spec/watirspec/elements/tr_spec.rb +48 -46
- data/spec/watirspec/elements/trs_spec.rb +42 -40
- data/spec/watirspec/elements/ul_spec.rb +56 -54
- data/spec/watirspec/elements/uls_spec.rb +26 -24
- data/spec/watirspec/radio_set_spec.rb +269 -267
- data/spec/watirspec/screenshot_spec.rb +20 -18
- data/spec/watirspec/scroll_spec.rb +152 -148
- data/spec/watirspec/shadow_root_spec.rb +86 -83
- data/spec/watirspec/user_editable_spec.rb +200 -198
- data/spec/watirspec/wait_spec.rb +289 -295
- data/spec/watirspec/window_switching_spec.rb +422 -434
- data/spec/watirspec_helper.rb +1 -23
- data/watir.gemspec +5 -4
- metadata +44 -33
- data/spec/watirspec/attributes_spec.rb +0 -18
- data/spec/watirspec/elements/table_nesting_spec.rb +0 -51
- data/spec/watirspec/special_chars_spec.rb +0 -23
|
@@ -2,61 +2,63 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
describe '#each' do
|
|
38
|
+
it 'iterates through table bodies correctly (browser context)' do
|
|
39
|
+
count = 0
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
browser.tbodys.each_with_index do |body, index|
|
|
42
|
+
expect(body.id).to eq browser.tbody(index: index).id
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
count += 1
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
expect(count).to be > 0
|
|
44
48
|
end
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
it 'iterates through table bodies correctly (table context)' do
|
|
51
|
+
table = browser.table(index: 0)
|
|
52
|
+
count = 0
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
54
|
-
|
|
57
|
+
count += 1
|
|
58
|
+
end
|
|
55
59
|
|
|
56
|
-
count
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
td = local_td.sibling_from_header(text: 'After income tax')
|
|
81
|
+
expect(td.text).to eq '4 532'
|
|
82
|
+
end
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
it 'returns the corresponding sibling cell by index' do
|
|
85
|
+
local_td = browser.td(text: '1 331')
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|