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,57 +2,59 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Elements' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
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
- describe '#[]' do
11
- context 'when elements do not exist' do
12
- it 'returns not existing element' do
13
- expect(browser.elements(id: 'non-existing')[0]).not_to exist
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
- describe '#eq and #eql?' do
19
- before { browser.goto WatirSpec.url_for('forms_with_input_elements.html') }
19
+ describe '#eq and #eql?' do
20
+ before { browser.goto WatirSpec.url_for('forms_with_input_elements.html') }
20
21
 
21
- it 'returns true if the two collections have the same Watir Elements' do
22
- a = browser.select_list(name: 'new_user_languages').options
23
- b = browser.select_list(id: 'new_user_languages').options
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
- expect(a).to eq b
26
- expect(a).to eql(b)
27
- end
26
+ expect(a).to eq b
27
+ expect(a).to eql(b)
28
+ end
28
29
 
29
- it 'returns false if the two collections are not the same' do
30
- a = browser.select_list(name: 'new_user_languages').options
31
- b = browser.select_list(id: 'new_user_role').options
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
- expect(a).to_not eq b
34
- expect(a).to_not eql(b)
34
+ expect(a).not_to eq b
35
+ expect(a).not_to eql(b)
36
+ end
35
37
  end
36
- end
37
38
 
38
- describe 'visible text' do
39
- it 'finds elements by visible text' do
40
- browser.goto WatirSpec.url_for('non_control_elements.html')
41
- container = browser.div(id: 'visible_text')
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
- expect(container.elements(visible_text: 'all visible').count).to eq(1)
44
- expect(container.elements(visible_text: /all visible/).count).to eq(1)
45
- expect(container.elements(visible_text: /some visible/).count).to eq(1)
46
- end
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
- it 'finds elements in spite of hidden text',
49
- except: {browser: :safari, reason: 'Safari is not filtering out hidden text'} do
50
- browser.goto WatirSpec.url_for('non_control_elements.html')
51
- container = browser.div(id: 'visible_text')
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
- expect(container.elements(visible_text: 'some visible').count).to eq(1)
54
- expect(container.elements(visible_text: 'none visible').count).to eq(0)
55
- expect(container.elements(visible_text: /none visible/).count).to eq(0)
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
- describe 'Em' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('non_control_elements.html'))
8
- end
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
- it 'returns the first em if given no args' do
20
- expect(browser.em).to exist
21
- end
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
- it 'returns false if the element does not exist' do
24
- expect(browser.em(id: 'no_such_id')).to_not exist
25
- end
20
+ it 'returns the first em if given no args' do
21
+ expect(browser.em).to exist
22
+ end
26
23
 
27
- it "raises TypeError when 'what' argument is invalid" do
28
- expect { browser.em(id: 3.14).exists? }.to raise_error(TypeError)
29
- end
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
- # Attribute methods
33
- describe '#id' do
34
- it 'returns the id attribute if the element exists' do
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
- it 'raises UnknownObjectException if the element does not exist' do
39
- expect { browser.em(id: 'no_such_id').id }.to raise_unknown_object_exception
40
- expect { browser.em(title: 'no_such_id').id }.to raise_unknown_object_exception
41
- expect { browser.em(index: 1337).id }.to raise_unknown_object_exception
42
- end
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
- describe '#title' do
46
- it 'returns the title of the element' do
47
- expect(browser.em(class: 'important-class').title).to eq 'ergo cogito'
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
- describe '#text' do
52
- it 'returns the text of the element' do
53
- expect(browser.em(id: 'important-id').text).to eq 'ergo cogito'
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
- it 'raises UnknownObjectException if the element does not exist' do
57
- expect { browser.em(id: 'no_such_id').text }.to raise_unknown_object_exception
58
- expect { browser.em(title: 'no_such_title').text }.to raise_unknown_object_exception
59
- expect { browser.em(index: 1337).text }.to raise_unknown_object_exception
60
- expect { browser.em(xpath: "//em[@id='no_such_id']").text }.to raise_unknown_object_exception
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
- describe '#respond_to?' do
65
- it 'returns true for all attribute methods' do
66
- expect(browser.em(index: 0)).to respond_to(:id)
67
- expect(browser.em(index: 0)).to respond_to(:class_name)
68
- expect(browser.em(index: 0)).to respond_to(:style)
69
- expect(browser.em(index: 0)).to respond_to(:text)
70
- expect(browser.em(index: 0)).to respond_to(:title)
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
- # Manipulation methods
75
- describe '#click' do
76
- it 'raises UnknownObjectException if the element does not exist' do
77
- expect { browser.em(id: 'no_such_id').click }.to raise_unknown_object_exception
78
- expect { browser.em(title: 'no_such_title').click }.to raise_unknown_object_exception
79
- expect { browser.em(index: 1337).click }.to raise_unknown_object_exception
80
- expect { browser.em(xpath: "//em[@id='no_such_id']").click }.to raise_unknown_object_exception
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
- describe 'Ems' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('non_control_elements.html'))
8
- end
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
- describe 'with selectors' do
11
- it 'returns the matching elements' do
12
- expect(browser.ems(class: 'important-class').to_a).to eq [browser.em(class: 'important-class')]
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
- describe '#length' do
17
- it 'returns the number of ems' do
18
- expect(browser.ems.length).to eq 1
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
- describe '#[]' do
23
- it 'returns the em at the given index' do
24
- expect(browser.ems[0].id).to eq 'important-id'
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
- describe '#each' do
29
- it 'iterates through ems correctly' do
30
- count = 0
29
+ describe '#each' do
30
+ it 'iterates through ems correctly' do
31
+ count = 0
31
32
 
32
- browser.ems.each_with_index do |e, index|
33
- expect(e.text).to eq browser.em(index: index).text
34
- expect(e.id).to eq browser.em(index: index).id
35
- expect(e.class_name).to eq browser.em(index: index).class_name
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
- count += 1
38
- end
38
+ count += 1
39
+ end
39
40
 
40
- expect(count).to be > 0
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
- describe 'FileField' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
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
- it 'returns the first file field if given no args' do
23
- expect(browser.file_field).to exist
24
- end
25
-
26
- it 'returns true for element with upper case type' do
27
- expect(browser.file_field(id: 'new_user_resume')).to exist
28
- end
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
- it "returns false if the file field doesn't exist" do
31
- expect(browser.file_field(id: 'no_such_id')).to_not exist
32
- expect(browser.file_field(id: /no_such_id/)).to_not exist
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
- # Attribute methods
47
- describe '#id' do
48
- it 'returns the id attribute if the text field exists' do
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
- it "raises UnknownObjectException if the text field doesn't exist" do
53
- expect { browser.file_field(index: 1337).id }.to raise_unknown_object_exception
54
- end
55
- end
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
- describe '#name' do
58
- it 'returns the name attribute if the text field exists' do
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
- it "raises UnknownObjectException if the text field doesn't exist" do
63
- expect { browser.file_field(index: 1337).name }.to raise_unknown_object_exception
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
- describe '#title' do
68
- it 'returns the title attribute if the text field exists' do
69
- expect(browser.file_field(id: 'new_user_portrait').title).to eq 'Smile!'
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
- describe '#type' do
74
- it 'returns the type attribute if the text field exists' do
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
- it "raises UnknownObjectException if the text field doesn't exist" do
79
- expect { browser.file_field(index: 1337).type }.to raise_unknown_object_exception
80
- end
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
- it 'does not alter its argument' do
128
- value = File.expand_path '.rubocop.yml'
129
- browser.file_field.value = value
130
- expect(value).to match(/\.rubocop\.yml$/)
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
- describe 'FileFields' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
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
- describe 'with selectors' do
11
- it 'returns the matching elements' do
12
- expect(browser.file_fields(class: 'portrait').to_a).to eq [browser.file_field(class: 'portrait')]
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
- describe '#length' do
17
- it 'returns the correct number of file fields' do
18
- expect(browser.file_fields.length).to eq 3
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
- describe '#[]' do
23
- it 'returns the file field at the given index' do
24
- expect(browser.file_fields[0].id).to eq 'new_user_portrait'
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
- describe '#each' do
29
- it 'iterates through file fields correctly' do
30
- count = 0
29
+ describe '#each' do
30
+ it 'iterates through file fields correctly' do
31
+ count = 0
31
32
 
32
- browser.file_fields.each_with_index do |f, index|
33
- expect(f.name).to eq browser.file_field(index: index).name
34
- expect(f.id).to eq browser.file_field(index: index).id
35
- expect(f.value).to eq browser.file_field(index: index).value
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
- count += 1
38
- end
38
+ count += 1
39
+ end
39
40
 
40
- expect(count).to be > 0
41
+ expect(count).to be > 0
42
+ end
41
43
  end
42
44
  end
43
45
  end