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,57 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
module Watir
|
|
6
|
+
describe ElementCollection do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
describe '#[]' do
|
|
12
|
+
context 'when elements do not exist' do
|
|
13
|
+
it 'returns not existing element' do
|
|
14
|
+
expect(browser.elements(id: 'non-existing')[0]).not_to exist
|
|
15
|
+
end
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
|
-
end
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
describe '#eq and #eql?' do
|
|
20
|
+
before { browser.goto WatirSpec.url_for('forms_with_input_elements.html') }
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
it 'returns true if the two collections have the same Watir Elements' do
|
|
23
|
+
a = browser.select_list(name: 'new_user_languages').options
|
|
24
|
+
b = browser.select_list(id: 'new_user_languages').options
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
expect(a).to eq b
|
|
27
|
+
expect(a).to eql(b)
|
|
28
|
+
end
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
it 'returns false if the two collections are not the same' do
|
|
31
|
+
a = browser.select_list(name: 'new_user_languages').options
|
|
32
|
+
b = browser.select_list(id: 'new_user_role').options
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
expect(a).not_to eq b
|
|
35
|
+
expect(a).not_to eql(b)
|
|
36
|
+
end
|
|
35
37
|
end
|
|
36
|
-
end
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
describe 'visible text' do
|
|
40
|
+
it 'finds elements by visible text' do
|
|
41
|
+
browser.goto WatirSpec.url_for('non_control_elements.html')
|
|
42
|
+
container = browser.div(id: 'visible_text')
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
expect(container.elements(visible_text: 'all visible').count).to eq(1)
|
|
45
|
+
expect(container.elements(visible_text: /all visible/).count).to eq(1)
|
|
46
|
+
expect(container.elements(visible_text: /some visible/).count).to eq(1)
|
|
47
|
+
end
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
it 'finds elements in spite of hidden text',
|
|
50
|
+
except: {browser: :safari, reason: 'Safari is not filtering out hidden text'} do
|
|
51
|
+
browser.goto WatirSpec.url_for('non_control_elements.html')
|
|
52
|
+
container = browser.div(id: 'visible_text')
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
expect(container.elements(visible_text: 'some visible').count).to eq(1)
|
|
55
|
+
expect(container.elements(visible_text: 'none visible').count).to eq(0)
|
|
56
|
+
expect(container.elements(visible_text: /none visible/).count).to eq(0)
|
|
57
|
+
end
|
|
56
58
|
end
|
|
57
59
|
end
|
|
58
60
|
end
|
|
@@ -2,82 +2,84 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Exists method
|
|
11
|
-
describe '#exists?' do
|
|
12
|
-
it 'returns true if the element exists' do
|
|
13
|
-
expect(browser.em(id: 'important-id')).to exist
|
|
14
|
-
expect(browser.em(class: 'important-class')).to exist
|
|
15
|
-
expect(browser.em(xpath: "//em[@id='important-id']")).to exist
|
|
16
|
-
expect(browser.em(index: 0)).to exist
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Em' do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('non_control_elements.html'))
|
|
17
9
|
end
|
|
18
10
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
# Exists method
|
|
12
|
+
describe '#exists?' do
|
|
13
|
+
it 'returns true if the element exists' do
|
|
14
|
+
expect(browser.em(id: 'important-id')).to exist
|
|
15
|
+
expect(browser.em(class: 'important-class')).to exist
|
|
16
|
+
expect(browser.em(xpath: "//em[@id='important-id']")).to exist
|
|
17
|
+
expect(browser.em(index: 0)).to exist
|
|
18
|
+
end
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
it 'returns the first em if given no args' do
|
|
21
|
+
expect(browser.em).to exist
|
|
22
|
+
end
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
24
|
+
it 'returns false if the element does not exist' do
|
|
25
|
+
expect(browser.em(id: 'no_such_id')).not_to exist
|
|
26
|
+
end
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
expect(browser.em(class: 'important-class').id).to eq 'important-id'
|
|
28
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
29
|
+
expect { browser.em(id: 3.14).exists? }.to raise_error(TypeError)
|
|
30
|
+
end
|
|
36
31
|
end
|
|
37
32
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
end
|
|
33
|
+
# Attribute methods
|
|
34
|
+
describe '#id' do
|
|
35
|
+
it 'returns the id attribute if the element exists' do
|
|
36
|
+
expect(browser.em(class: 'important-class').id).to eq 'important-id'
|
|
37
|
+
end
|
|
44
38
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
40
|
+
expect { browser.em(id: 'no_such_id').id }.to raise_unknown_object_exception
|
|
41
|
+
expect { browser.em(title: 'no_such_id').id }.to raise_unknown_object_exception
|
|
42
|
+
expect { browser.em(index: 1337).id }.to raise_unknown_object_exception
|
|
43
|
+
end
|
|
48
44
|
end
|
|
49
|
-
end
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
describe '#title' do
|
|
47
|
+
it 'returns the title of the element' do
|
|
48
|
+
expect(browser.em(class: 'important-class').title).to eq 'ergo cogito'
|
|
49
|
+
end
|
|
54
50
|
end
|
|
55
51
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
describe '#text' do
|
|
53
|
+
it 'returns the text of the element' do
|
|
54
|
+
expect(browser.em(id: 'important-id').text).to eq 'ergo cogito'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
58
|
+
expect { browser.em(id: 'no_such_id').text }.to raise_unknown_object_exception
|
|
59
|
+
expect { browser.em(title: 'no_such_title').text }.to raise_unknown_object_exception
|
|
60
|
+
expect { browser.em(index: 1337).text }.to raise_unknown_object_exception
|
|
61
|
+
expect { browser.em(xpath: "//em[@id='no_such_id']").text }.to raise_unknown_object_exception
|
|
62
|
+
end
|
|
61
63
|
end
|
|
62
|
-
end
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
describe '#respond_to?' do
|
|
66
|
+
it 'returns true for all attribute methods' do
|
|
67
|
+
expect(browser.em(index: 0)).to respond_to(:id)
|
|
68
|
+
expect(browser.em(index: 0)).to respond_to(:class_name)
|
|
69
|
+
expect(browser.em(index: 0)).to respond_to(:style)
|
|
70
|
+
expect(browser.em(index: 0)).to respond_to(:text)
|
|
71
|
+
expect(browser.em(index: 0)).to respond_to(:title)
|
|
72
|
+
end
|
|
71
73
|
end
|
|
72
|
-
end
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
# Manipulation methods
|
|
76
|
+
describe '#click' do
|
|
77
|
+
it 'raises UnknownObjectException if the element does not exist' do
|
|
78
|
+
expect { browser.em(id: 'no_such_id').click }.to raise_unknown_object_exception
|
|
79
|
+
expect { browser.em(title: 'no_such_title').click }.to raise_unknown_object_exception
|
|
80
|
+
expect { browser.em(index: 1337).click }.to raise_unknown_object_exception
|
|
81
|
+
expect { browser.em(xpath: "//em[@id='no_such_id']").click }.to raise_unknown_object_exception
|
|
82
|
+
end
|
|
81
83
|
end
|
|
82
84
|
end
|
|
83
85
|
end
|
|
@@ -2,42 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
module Watir
|
|
6
|
+
describe 'Ems' do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('non_control_elements.html'))
|
|
9
|
+
end
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.ems(class: 'important-class').to_a).to eq [browser.em(class: 'important-class')]
|
|
14
|
+
end
|
|
13
15
|
end
|
|
14
|
-
end
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the number of ems' do
|
|
19
|
+
expect(browser.ems.length).to eq 1
|
|
20
|
+
end
|
|
19
21
|
end
|
|
20
|
-
end
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the em at the given index' do
|
|
25
|
+
expect(browser.ems[0].id).to eq 'important-id'
|
|
26
|
+
end
|
|
25
27
|
end
|
|
26
|
-
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through ems correctly' do
|
|
31
|
+
count = 0
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
browser.ems.each_with_index do |e, index|
|
|
34
|
+
expect(e.text).to eq browser.em(index: index).text
|
|
35
|
+
expect(e.id).to eq browser.em(index: index).id
|
|
36
|
+
expect(e.class_name).to eq browser.em(index: index).class_name
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
count += 1
|
|
39
|
+
end
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
expect(count).to be > 0
|
|
42
|
+
end
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
end
|
|
@@ -2,132 +2,134 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
describe '#exist?' do
|
|
11
|
-
it 'returns true if the file field exists' do
|
|
12
|
-
expect(browser.file_field(id: 'new_user_portrait')).to exist
|
|
13
|
-
expect(browser.file_field(id: /new_user_portrait/)).to exist
|
|
14
|
-
expect(browser.file_field(name: 'new_user_portrait')).to exist
|
|
15
|
-
expect(browser.file_field(name: /new_user_portrait/)).to exist
|
|
16
|
-
expect(browser.file_field(class: 'portrait')).to exist
|
|
17
|
-
expect(browser.file_field(class: /portrait/)).to exist
|
|
18
|
-
expect(browser.file_field(index: 0)).to exist
|
|
19
|
-
expect(browser.file_field(xpath: "//input[@id='new_user_portrait']")).to exist
|
|
5
|
+
module Watir
|
|
6
|
+
describe FileField do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
20
9
|
end
|
|
21
10
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
describe '#exist?' do
|
|
12
|
+
it 'returns true if the file field exists' do
|
|
13
|
+
expect(browser.file_field(id: 'new_user_portrait')).to exist
|
|
14
|
+
expect(browser.file_field(id: /new_user_portrait/)).to exist
|
|
15
|
+
expect(browser.file_field(name: 'new_user_portrait')).to exist
|
|
16
|
+
expect(browser.file_field(name: /new_user_portrait/)).to exist
|
|
17
|
+
expect(browser.file_field(class: 'portrait')).to exist
|
|
18
|
+
expect(browser.file_field(class: /portrait/)).to exist
|
|
19
|
+
expect(browser.file_field(index: 0)).to exist
|
|
20
|
+
expect(browser.file_field(xpath: "//input[@id='new_user_portrait']")).to exist
|
|
21
|
+
end
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
expect(browser.file_field(name: 'no_such_name')).to_not exist
|
|
34
|
-
expect(browser.file_field(name: /no_such_name/)).to_not exist
|
|
35
|
-
expect(browser.file_field(class: 'no_such_class')).to_not exist
|
|
36
|
-
expect(browser.file_field(class: /no_such_class/)).to_not exist
|
|
37
|
-
expect(browser.file_field(index: 1337)).to_not exist
|
|
38
|
-
expect(browser.file_field(xpath: "//input[@id='no_such_id']")).to_not exist
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it "raises TypeError when 'what' argument is invalid" do
|
|
42
|
-
expect { browser.file_field(id: 3.14).exists? }.to raise_error(TypeError)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
23
|
+
it 'returns the first file field if given no args' do
|
|
24
|
+
expect(browser.file_field).to exist
|
|
25
|
+
end
|
|
45
26
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
expect(browser.file_field(index: 0).id).to eq 'new_user_portrait'
|
|
50
|
-
end
|
|
27
|
+
it 'returns true for element with upper case type' do
|
|
28
|
+
expect(browser.file_field(id: 'new_user_resume')).to exist
|
|
29
|
+
end
|
|
51
30
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
31
|
+
it "returns false if the file field doesn't exist" do
|
|
32
|
+
expect(browser.file_field(id: 'no_such_id')).not_to exist
|
|
33
|
+
expect(browser.file_field(id: /no_such_id/)).not_to exist
|
|
34
|
+
expect(browser.file_field(name: 'no_such_name')).not_to exist
|
|
35
|
+
expect(browser.file_field(name: /no_such_name/)).not_to exist
|
|
36
|
+
expect(browser.file_field(class: 'no_such_class')).not_to exist
|
|
37
|
+
expect(browser.file_field(class: /no_such_class/)).not_to exist
|
|
38
|
+
expect(browser.file_field(index: 1337)).not_to exist
|
|
39
|
+
expect(browser.file_field(xpath: "//input[@id='no_such_id']")).not_to exist
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "raises TypeError when 'what' argument is invalid" do
|
|
43
|
+
expect { browser.file_field(id: 3.14).exists? }.to raise_error(TypeError)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Attribute methods
|
|
48
|
+
describe '#id' do
|
|
49
|
+
it 'returns the id attribute if the text field exists' do
|
|
50
|
+
expect(browser.file_field(index: 0).id).to eq 'new_user_portrait'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
54
|
+
expect { browser.file_field(index: 1337).id }.to raise_unknown_object_exception
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe '#name' do
|
|
59
|
+
it 'returns the name attribute if the text field exists' do
|
|
60
|
+
expect(browser.file_field(index: 0).name).to eq 'new_user_portrait'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
64
|
+
expect { browser.file_field(index: 1337).name }.to raise_unknown_object_exception
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe '#title' do
|
|
69
|
+
it 'returns the title attribute if the text field exists' do
|
|
70
|
+
expect(browser.file_field(id: 'new_user_portrait').title).to eq 'Smile!'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#type' do
|
|
75
|
+
it 'returns the type attribute if the text field exists' do
|
|
76
|
+
expect(browser.file_field(index: 0).type).to eq 'file'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "raises UnknownObjectException if the text field doesn't exist" do
|
|
80
|
+
expect { browser.file_field(index: 1337).type }.to raise_unknown_object_exception
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe '#respond_to?' do
|
|
85
|
+
it 'returns true for all attribute methods' do
|
|
86
|
+
expect(browser.file_field(index: 0)).to respond_to(:class_name)
|
|
87
|
+
expect(browser.file_field(index: 0)).to respond_to(:id)
|
|
88
|
+
expect(browser.file_field(index: 0)).to respond_to(:name)
|
|
89
|
+
expect(browser.file_field(index: 0)).to respond_to(:title)
|
|
90
|
+
expect(browser.file_field(index: 0)).to respond_to(:type)
|
|
91
|
+
expect(browser.file_field(index: 0)).to respond_to(:value)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Manipulation methods
|
|
96
|
+
|
|
97
|
+
describe '#set' do
|
|
98
|
+
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
|
99
|
+
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
|
100
|
+
|
|
101
|
+
element = browser.file_field(name: 'new_user_portrait')
|
|
102
|
+
element.upload __FILE__
|
|
103
|
+
|
|
104
|
+
expect(element.value).to include(File.basename(__FILE__)) # only some browser will return the full path
|
|
105
|
+
expect(messages.first).to include(File.basename(__FILE__))
|
|
56
106
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
expect(browser.file_field(index: 0).name).to eq 'new_user_portrait'
|
|
60
|
-
end
|
|
107
|
+
browser.button(name: 'new_user_submit').click
|
|
108
|
+
end
|
|
61
109
|
|
|
62
|
-
|
|
63
|
-
|
|
110
|
+
it 'raises an error if the file does not exist' do
|
|
111
|
+
expect {
|
|
112
|
+
browser.file_field.set(File.join(Dir.tmpdir, 'unlikely-to-exist'))
|
|
113
|
+
}.to raise_error(Errno::ENOENT)
|
|
114
|
+
end
|
|
64
115
|
end
|
|
65
|
-
end
|
|
66
116
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
end
|
|
117
|
+
describe '#value=', exclude: {browser: :ie} do
|
|
118
|
+
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
|
119
|
+
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
|
72
120
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
expect(browser.file_field(index: 0).type).to eq 'file'
|
|
76
|
-
end
|
|
121
|
+
path = File.expand_path(__FILE__)
|
|
122
|
+
element = browser.file_field(name: 'new_user_portrait')
|
|
77
123
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
describe '#respond_to?' do
|
|
84
|
-
it 'returns true for all attribute methods' do
|
|
85
|
-
expect(browser.file_field(index: 0)).to respond_to(:class_name)
|
|
86
|
-
expect(browser.file_field(index: 0)).to respond_to(:id)
|
|
87
|
-
expect(browser.file_field(index: 0)).to respond_to(:name)
|
|
88
|
-
expect(browser.file_field(index: 0)).to respond_to(:title)
|
|
89
|
-
expect(browser.file_field(index: 0)).to respond_to(:type)
|
|
90
|
-
expect(browser.file_field(index: 0)).to respond_to(:value)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Manipulation methods
|
|
95
|
-
|
|
96
|
-
describe '#set' do
|
|
97
|
-
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
|
98
|
-
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
|
99
|
-
|
|
100
|
-
element = browser.file_field(name: 'new_user_portrait')
|
|
101
|
-
element.upload __FILE__
|
|
102
|
-
|
|
103
|
-
expect(element.value).to include(File.basename(__FILE__)) # only some browser will return the full path
|
|
104
|
-
expect(messages.first).to include(File.basename(__FILE__))
|
|
105
|
-
|
|
106
|
-
browser.button(name: 'new_user_submit').click
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it 'raises an error if the file does not exist' do
|
|
110
|
-
expect {
|
|
111
|
-
browser.file_field.set(File.join(Dir.tmpdir, 'unlikely-to-exist'))
|
|
112
|
-
}.to raise_error(Errno::ENOENT)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
describe '#value=', exclude: {browser: :ie} do
|
|
117
|
-
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
|
118
|
-
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
|
119
|
-
|
|
120
|
-
path = File.expand_path(__FILE__)
|
|
121
|
-
element = browser.file_field(name: 'new_user_portrait')
|
|
122
|
-
|
|
123
|
-
element.value = path
|
|
124
|
-
expect(element.value).to include(File.basename(path)) # only some browser will return the full path
|
|
125
|
-
end
|
|
124
|
+
element.value = path
|
|
125
|
+
expect(element.value).to include(File.basename(path)) # only some browser will return the full path
|
|
126
|
+
end
|
|
126
127
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
it 'does not alter its argument' do
|
|
129
|
+
value = File.expand_path '.rubocop.yml'
|
|
130
|
+
browser.file_field.value = value
|
|
131
|
+
expect(value).to match(/\.rubocop\.yml$/)
|
|
132
|
+
end
|
|
131
133
|
end
|
|
132
134
|
end
|
|
133
135
|
end
|
|
@@ -2,42 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
require 'watirspec_helper'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
module Watir
|
|
6
|
+
describe FileFieldCollection do
|
|
7
|
+
before do
|
|
8
|
+
browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
|
|
9
|
+
end
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
describe 'with selectors' do
|
|
12
|
+
it 'returns the matching elements' do
|
|
13
|
+
expect(browser.file_fields(class: 'portrait').to_a).to eq [browser.file_field(class: 'portrait')]
|
|
14
|
+
end
|
|
13
15
|
end
|
|
14
|
-
end
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
describe '#length' do
|
|
18
|
+
it 'returns the correct number of file fields' do
|
|
19
|
+
expect(browser.file_fields.length).to eq 3
|
|
20
|
+
end
|
|
19
21
|
end
|
|
20
|
-
end
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
describe '#[]' do
|
|
24
|
+
it 'returns the file field at the given index' do
|
|
25
|
+
expect(browser.file_fields[0].id).to eq 'new_user_portrait'
|
|
26
|
+
end
|
|
25
27
|
end
|
|
26
|
-
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
describe '#each' do
|
|
30
|
+
it 'iterates through file fields correctly' do
|
|
31
|
+
count = 0
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
browser.file_fields.each_with_index do |f, index|
|
|
34
|
+
expect(f.name).to eq browser.file_field(index: index).name
|
|
35
|
+
expect(f.id).to eq browser.file_field(index: index).id
|
|
36
|
+
expect(f.value).to eq browser.file_field(index: index).value
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
count += 1
|
|
39
|
+
end
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
expect(count).to be > 0
|
|
42
|
+
end
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
end
|