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,39 +2,41 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Ps' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('non_control_elements.html'))
8
- end
5
+ module Watir
6
+ describe ParagraphCollection 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.ps(class: 'lead').to_a).to eq [browser.p(class: 'lead')]
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ expect(browser.ps(class: 'lead').to_a).to eq [browser.p(class: 'lead')]
14
+ end
13
15
  end
14
- end
15
16
 
16
- describe '#length' do
17
- it 'returns the number of ps' do
18
- expect(browser.ps.length).to eq 5
17
+ describe '#length' do
18
+ it 'returns the number of ps' do
19
+ expect(browser.ps.length).to eq 5
20
+ end
19
21
  end
20
- end
21
22
 
22
- describe '#[]' do
23
- it 'returns the p at the given index' do
24
- expect(browser.ps[0].id).to eq 'lead'
23
+ describe '#[]' do
24
+ it 'returns the p at the given index' do
25
+ expect(browser.ps[0].id).to eq 'lead'
26
+ end
25
27
  end
26
- end
27
28
 
28
- describe '#each' do
29
- it 'iterates through ps correctly' do
30
- count = 0
29
+ describe '#each' do
30
+ it 'iterates through ps correctly' do
31
+ count = 0
31
32
 
32
- browser.ps.each_with_index do |p, index|
33
- expect(p.id).to eq browser.p(index: index).id
34
- count += 1
35
- end
33
+ browser.ps.each_with_index do |p, index|
34
+ expect(p.id).to eq browser.p(index: index).id
35
+ count += 1
36
+ end
36
37
 
37
- expect(count).to be > 0
38
+ expect(count).to be > 0
39
+ end
38
40
  end
39
41
  end
40
42
  end
@@ -2,256 +2,258 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Radio' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
9
-
10
- # Exists method
11
- describe '#exists?' do
12
- it 'returns true if the radio button exists' do
13
- expect(browser.radio(id: 'new_user_newsletter_yes')).to exist
14
- expect(browser.radio(id: /new_user_newsletter_yes/)).to exist
15
- expect(browser.radio(name: 'new_user_newsletter')).to exist
16
- expect(browser.radio(name: /new_user_newsletter/)).to exist
17
- expect(browser.radio(value: 'yes')).to exist
18
- expect(browser.radio(value: /yes/)).to exist
19
- expect(browser.radio(text: 'Yes')).to exist
20
- expect(browser.radio(text: /Yes/)).to exist
21
- expect(browser.radio(class: 'huge')).to exist
22
- expect(browser.radio(class: /huge/)).to exist
23
- expect(browser.radio(index: 0)).to exist
24
- expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to exist
25
- end
26
-
27
- it 'returns the first radio if given no args' do
28
- expect(browser.radio).to exist
29
- end
30
-
31
- it 'returns true if the radio button exists (search by name and value)' do
32
- expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
33
- browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='yes']").set
34
- end
35
-
36
- it 'returns true for element with upper case type' do
37
- expect(browser.radio(id: 'new_user_newsletter_probably')).to exist
38
- end
39
-
40
- it 'returns false if the radio button does not exist' do
41
- expect(browser.radio(id: 'no_such_id')).to_not exist
42
- expect(browser.radio(id: /no_such_id/)).to_not exist
43
- expect(browser.radio(name: 'no_such_name')).to_not exist
44
- expect(browser.radio(name: /no_such_name/)).to_not exist
45
- expect(browser.radio(value: 'no_such_value')).to_not exist
46
- expect(browser.radio(value: /no_such_value/)).to_not exist
47
- expect(browser.radio(text: 'no_such_text')).to_not exist
48
- expect(browser.radio(text: /no_such_text/)).to_not exist
49
- expect(browser.radio(class: 'no_such_class')).to_not exist
50
- expect(browser.radio(class: /no_such_class/)).to_not exist
51
- expect(browser.radio(index: 1337)).to_not exist
52
- expect(browser.radio(xpath: "input[@id='no_such_id']")).to_not exist
53
- end
54
-
55
- it 'returns false if the radio button does not exist (search by name and value)' do
56
- expect(browser.radio(name: 'new_user_newsletter', value: 'no_such_value')).to_not exist
57
- expect(browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='no_such_value']")).to_not exist
58
- expect(browser.radio(name: 'no_such_name', value: 'yes')).to_not exist
59
- expect(browser.radio(xpath: "//input[@name='no_such_name' and @value='yes']")).to_not exist
60
- end
61
-
62
- it 'returns true for radios with a string value' do
63
- expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
64
- expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to exist
65
- end
66
-
67
- it "raises TypeError when 'what' argument is invalid" do
68
- expect { browser.radio(id: 3.14).exists? }.to raise_error(TypeError)
69
- end
70
- end
71
-
72
- # Attribute methods
73
- describe '#id' do
74
- it 'returns the id attribute if the radio exists and has an attribute' do
75
- expect(browser.radio(index: 0).id).to eq 'new_user_newsletter_yes'
76
- end
77
-
78
- it "returns an empty string if the radio exists and the attribute doesn't" do
79
- expect(browser.radio(index: 2).id).to eq ''
80
- end
81
-
82
- it "raises UnknownObjectException if the radio doesn't exist" do
83
- expect { browser.radio(index: 1337).id }.to raise_unknown_object_exception
84
- end
85
- end
86
-
87
- describe '#name' do
88
- it 'returns the name attribute if the radio exists' do
89
- expect(browser.radio(id: 'new_user_newsletter_yes').name).to eq 'new_user_newsletter'
90
- end
91
-
92
- it "returns an empty string if the radio exists and the attribute doesn't" do
93
- expect(browser.radio(id: 'new_user_newsletter_absolutely').name).to eq ''
94
- end
95
-
96
- it "raises UnknownObjectException if the radio doesn't exist" do
97
- expect { browser.radio(index: 1337).name }.to raise_unknown_object_exception
98
- end
99
- end
100
-
101
- describe '#text' do
102
- it 'returns the text if the radio exists' do
103
- expect(browser.radio(id: 'new_user_newsletter_yes').text).to eq 'Yes'
104
- end
105
-
106
- it "raises UnknownObjectException if the radio doesn't exist" do
107
- expect { browser.radio(index: 1337).text }.to raise_unknown_object_exception
108
- end
109
-
110
- it 'returns empty string when there is no label' do
111
- form = browser.form(id: 'new_user')
112
- expect(form.radio(index: 2).text).to eq ''
113
- end
114
- end
115
-
116
- describe '#title' do
117
- it 'returns the title attribute if the radio exists' do
118
- expect(browser.radio(id: 'new_user_newsletter_no').title).to eq 'Traitor!'
119
- end
120
-
121
- it "returns an empty string if the radio exists and the attribute doesn't" do
122
- expect(browser.radio(id: 'new_user_newsletter_yes').title).to eq ''
123
- end
124
-
125
- it "raises UnknownObjectException if the radio doesn't exist" do
126
- expect { browser.radio(index: 1337).title }.to raise_unknown_object_exception
127
- end
128
- end
129
-
130
- describe '#type' do
131
- it 'returns the type attribute if the radio exists' do
132
- expect(browser.radio(index: 0).type).to eq 'radio'
5
+ module Watir
6
+ describe Radio do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
9
+ end
10
+
11
+ # Exists method
12
+ describe '#exists?' do
13
+ it 'returns true if the radio button exists' do
14
+ expect(browser.radio(id: 'new_user_newsletter_yes')).to exist
15
+ expect(browser.radio(id: /new_user_newsletter_yes/)).to exist
16
+ expect(browser.radio(name: 'new_user_newsletter')).to exist
17
+ expect(browser.radio(name: /new_user_newsletter/)).to exist
18
+ expect(browser.radio(value: 'yes')).to exist
19
+ expect(browser.radio(value: /yes/)).to exist
20
+ expect(browser.radio(text: 'Yes')).to exist
21
+ expect(browser.radio(text: /Yes/)).to exist
22
+ expect(browser.radio(class: 'huge')).to exist
23
+ expect(browser.radio(class: /huge/)).to exist
24
+ expect(browser.radio(index: 0)).to exist
25
+ expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to exist
26
+ end
27
+
28
+ it 'returns the first radio if given no args' do
29
+ expect(browser.radio).to exist
30
+ end
31
+
32
+ it 'returns true if the radio button exists (search by name and value)' do
33
+ expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
34
+ browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='yes']").set
35
+ end
36
+
37
+ it 'returns true for element with upper case type' do
38
+ expect(browser.radio(id: 'new_user_newsletter_probably')).to exist
39
+ end
40
+
41
+ it 'returns false if the radio button does not exist' do
42
+ expect(browser.radio(id: 'no_such_id')).not_to exist
43
+ expect(browser.radio(id: /no_such_id/)).not_to exist
44
+ expect(browser.radio(name: 'no_such_name')).not_to exist
45
+ expect(browser.radio(name: /no_such_name/)).not_to exist
46
+ expect(browser.radio(value: 'no_such_value')).not_to exist
47
+ expect(browser.radio(value: /no_such_value/)).not_to exist
48
+ expect(browser.radio(text: 'no_such_text')).not_to exist
49
+ expect(browser.radio(text: /no_such_text/)).not_to exist
50
+ expect(browser.radio(class: 'no_such_class')).not_to exist
51
+ expect(browser.radio(class: /no_such_class/)).not_to exist
52
+ expect(browser.radio(index: 1337)).not_to exist
53
+ expect(browser.radio(xpath: "input[@id='no_such_id']")).not_to exist
54
+ end
55
+
56
+ it 'returns false if the radio button does not exist (search by name and value)' do
57
+ expect(browser.radio(name: 'new_user_newsletter', value: 'no_such_value')).not_to exist
58
+ expect(browser.radio(xpath: "//input[@name='new_user_newsletter' and @value='no_such_value']")).not_to exist
59
+ expect(browser.radio(name: 'no_such_name', value: 'yes')).not_to exist
60
+ expect(browser.radio(xpath: "//input[@name='no_such_name' and @value='yes']")).not_to exist
61
+ end
62
+
63
+ it 'returns true for radios with a string value' do
64
+ expect(browser.radio(name: 'new_user_newsletter', value: 'yes')).to exist
65
+ expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to exist
66
+ end
67
+
68
+ it "raises TypeError when 'what' argument is invalid" do
69
+ expect { browser.radio(id: 3.14).exists? }.to raise_error(TypeError)
70
+ end
71
+ end
72
+
73
+ # Attribute methods
74
+ describe '#id' do
75
+ it 'returns the id attribute if the radio exists and has an attribute' do
76
+ expect(browser.radio(index: 0).id).to eq 'new_user_newsletter_yes'
77
+ end
78
+
79
+ it "returns an empty string if the radio exists and the attribute doesn't" do
80
+ expect(browser.radio(index: 2).id).to eq ''
81
+ end
82
+
83
+ it "raises UnknownObjectException if the radio doesn't exist" do
84
+ expect { browser.radio(index: 1337).id }.to raise_unknown_object_exception
85
+ end
86
+ end
87
+
88
+ describe '#name' do
89
+ it 'returns the name attribute if the radio exists' do
90
+ expect(browser.radio(id: 'new_user_newsletter_yes').name).to eq 'new_user_newsletter'
91
+ end
92
+
93
+ it "returns an empty string if the radio exists and the attribute doesn't" do
94
+ expect(browser.radio(id: 'new_user_newsletter_absolutely').name).to eq ''
95
+ end
96
+
97
+ it "raises UnknownObjectException if the radio doesn't exist" do
98
+ expect { browser.radio(index: 1337).name }.to raise_unknown_object_exception
99
+ end
100
+ end
101
+
102
+ describe '#text' do
103
+ it 'returns the text if the radio exists' do
104
+ expect(browser.radio(id: 'new_user_newsletter_yes').text).to eq 'Yes'
105
+ end
106
+
107
+ it "raises UnknownObjectException if the radio doesn't exist" do
108
+ expect { browser.radio(index: 1337).text }.to raise_unknown_object_exception
109
+ end
110
+
111
+ it 'returns empty string when there is no label' do
112
+ form = browser.form(id: 'new_user')
113
+ expect(form.radio(index: 2).text).to eq ''
114
+ end
115
+ end
116
+
117
+ describe '#title' do
118
+ it 'returns the title attribute if the radio exists' do
119
+ expect(browser.radio(id: 'new_user_newsletter_no').title).to eq 'Traitor!'
120
+ end
121
+
122
+ it "returns an empty string if the radio exists and the attribute doesn't" do
123
+ expect(browser.radio(id: 'new_user_newsletter_yes').title).to eq ''
124
+ end
125
+
126
+ it "raises UnknownObjectException if the radio doesn't exist" do
127
+ expect { browser.radio(index: 1337).title }.to raise_unknown_object_exception
128
+ end
129
+ end
130
+
131
+ describe '#type' do
132
+ it 'returns the type attribute if the radio exists' do
133
+ expect(browser.radio(index: 0).type).to eq 'radio'
134
+ end
135
+
136
+ it "raises UnknownObjectException if the radio doesn't exist" do
137
+ expect { browser.radio(index: 1337).type }.to raise_unknown_object_exception
138
+ end
139
+ end
140
+
141
+ describe '#value' do
142
+ it 'returns the value attribute if the radio exists' do
143
+ expect(browser.radio(id: 'new_user_newsletter_yes').value).to eq 'yes'
144
+ end
145
+
146
+ it "raises UnknownObjectException if the radio doesn't exist" do
147
+ expect { browser.radio(index: 1337).value }.to raise_unknown_object_exception
148
+ end
149
+ end
150
+
151
+ describe '#respond_to?' do
152
+ it 'returns true for all attribute methods' do
153
+ expect(browser.radio(index: 0)).to respond_to(:class_name)
154
+ expect(browser.radio(index: 0)).to respond_to(:id)
155
+ expect(browser.radio(index: 0)).to respond_to(:name)
156
+ expect(browser.radio(index: 0)).to respond_to(:title)
157
+ expect(browser.radio(index: 0)).to respond_to(:type)
158
+ expect(browser.radio(index: 0)).to respond_to(:value)
159
+ end
160
+ end
161
+
162
+ # Access methods
163
+ describe '#enabled?' do
164
+ it 'returns true if the radio button is enabled' do
165
+ expect(browser.radio(id: 'new_user_newsletter_yes')).to be_enabled
166
+ expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to be_enabled
167
+ end
168
+
169
+ it 'returns false if the radio button is disabled' do
170
+ expect(browser.radio(id: 'new_user_newsletter_nah')).not_to be_enabled
171
+ expect(browser.radio(xpath: "//input[@id='new_user_newsletter_nah']")).not_to be_enabled
172
+ end
173
+
174
+ it "raises UnknownObjectException if the radio button doesn't exist" do
175
+ expect { browser.radio(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
176
+ expect { browser.radio(xpath: "//input[@id='no_such_id']").enabled? }.to raise_unknown_object_exception
177
+ end
133
178
  end
134
-
135
- it "raises UnknownObjectException if the radio doesn't exist" do
136
- expect { browser.radio(index: 1337).type }.to raise_unknown_object_exception
137
- end
138
- end
139
-
140
- describe '#value' do
141
- it 'returns the value attribute if the radio exists' do
142
- expect(browser.radio(id: 'new_user_newsletter_yes').value).to eq 'yes'
143
- end
144
-
145
- it "raises UnknownObjectException if the radio doesn't exist" do
146
- expect { browser.radio(index: 1337).value }.to raise_unknown_object_exception
147
- end
148
- end
149
-
150
- describe '#respond_to?' do
151
- it 'returns true for all attribute methods' do
152
- expect(browser.radio(index: 0)).to respond_to(:class_name)
153
- expect(browser.radio(index: 0)).to respond_to(:id)
154
- expect(browser.radio(index: 0)).to respond_to(:name)
155
- expect(browser.radio(index: 0)).to respond_to(:title)
156
- expect(browser.radio(index: 0)).to respond_to(:type)
157
- expect(browser.radio(index: 0)).to respond_to(:value)
158
- end
159
- end
160
-
161
- # Access methods
162
- describe '#enabled?' do
163
- it 'returns true if the radio button is enabled' do
164
- expect(browser.radio(id: 'new_user_newsletter_yes')).to be_enabled
165
- expect(browser.radio(xpath: "//input[@id='new_user_newsletter_yes']")).to be_enabled
166
- end
167
-
168
- it 'returns false if the radio button is disabled' do
169
- expect(browser.radio(id: 'new_user_newsletter_nah')).to_not be_enabled
170
- expect(browser.radio(xpath: "//input[@id='new_user_newsletter_nah']")).to_not be_enabled
171
- end
172
-
173
- it "raises UnknownObjectException if the radio button doesn't exist" do
174
- expect { browser.radio(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
175
- expect { browser.radio(xpath: "//input[@id='no_such_id']").enabled? }.to raise_unknown_object_exception
176
- end
177
- end
178
-
179
- describe '#disabled?' do
180
- it 'returns true if the radio is disabled' do
181
- expect(browser.radio(id: 'new_user_newsletter_nah')).to be_disabled
182
- end
183
-
184
- it 'returns false if the radio is enabled' do
185
- expect(browser.radio(id: 'new_user_newsletter_yes')).to_not be_disabled
186
- end
187
-
188
- it "raises UnknownObjectException if the radio doesn't exist" do
189
- expect { browser.radio(index: 1337).disabled? }.to raise_unknown_object_exception
190
- end
191
- end
192
-
193
- describe '#set' do
194
- it 'sets the radio button' do
195
- browser.radio(id: 'new_user_newsletter_no').set
196
- expect(browser.radio(id: 'new_user_newsletter_no')).to be_set
197
- end
198
-
199
- it 'sets the radio button when found by :xpath' do
200
- browser.radio(xpath: "//input[@id='new_user_newsletter_no']").set
201
- expect(browser.radio(xpath: "//input[@id='new_user_newsletter_no']")).to be_set
202
- end
203
-
204
- it 'fires the onclick event' do
205
- browser.radio(id: 'new_user_newsletter_no').set
206
- browser.radio(id: 'new_user_newsletter_yes').set
207
- expect(messages).to eq ['clicked: new_user_newsletter_no', 'clicked: new_user_newsletter_yes']
208
- end
209
-
210
- it 'fires the onchange event' do
211
- browser.radio(value: 'certainly').set
212
- expect(messages).to eq ['changed: new_user_newsletter']
213
-
214
- browser.radio(value: 'certainly').set
215
- expect(messages).to eq ['changed: new_user_newsletter'] # no event fired here - didn't change
216
-
217
- browser.radio(value: 'yes').set
218
- browser.radio(value: 'certainly').set
219
- list = ['changed: new_user_newsletter', 'clicked: new_user_newsletter_yes', 'changed: new_user_newsletter']
220
- expect(messages).to eq list
221
- end
222
-
223
- it "raises UnknownObjectException if the radio button doesn't exist" do
224
- expect { browser.radio(name: 'no_such_name').set }.to raise_unknown_object_exception
225
- expect { browser.radio(xpath: "//input[@name='no_such_name']").set }.to raise_unknown_object_exception
226
- end
227
-
228
- it 'raises ObjectDisabledException if the radio is disabled' do
229
- expect { browser.radio(id: 'new_user_newsletter_nah').set }.to raise_object_disabled_exception
230
- expect { browser.radio(xpath: "//input[@id='new_user_newsletter_nah']").set }.to raise_object_disabled_exception
231
- end
232
- end
233
-
234
- # Other
235
- describe '#set?' do
236
- it 'returns true if the radio button is set' do
237
- expect(browser.radio(id: 'new_user_newsletter_yes')).to be_set
238
- end
239
-
240
- it 'returns false if the radio button unset' do
241
- expect(browser.radio(id: 'new_user_newsletter_no')).to_not be_set
242
- end
243
-
244
- it 'returns the state for radios with string values' do
245
- expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to_not be_set
246
- browser.radio(name: 'new_user_newsletter', value: 'no').set
247
- expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to be_set
248
- browser.radio(name: 'new_user_newsletter', value: 'yes').set
249
- expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to_not be_set
250
- end
251
-
252
- it "raises UnknownObjectException if the radio button doesn't exist" do
253
- expect { browser.radio(id: 'no_such_id').set? }.to raise_unknown_object_exception
254
- expect { browser.radio(xpath: "//input[@id='no_such_id']").set? }.to raise_unknown_object_exception
179
+
180
+ describe '#disabled?' do
181
+ it 'returns true if the radio is disabled' do
182
+ expect(browser.radio(id: 'new_user_newsletter_nah')).to be_disabled
183
+ end
184
+
185
+ it 'returns false if the radio is enabled' do
186
+ expect(browser.radio(id: 'new_user_newsletter_yes')).not_to be_disabled
187
+ end
188
+
189
+ it "raises UnknownObjectException if the radio doesn't exist" do
190
+ expect { browser.radio(index: 1337).disabled? }.to raise_unknown_object_exception
191
+ end
192
+ end
193
+
194
+ describe '#set' do
195
+ it 'sets the radio button' do
196
+ browser.radio(id: 'new_user_newsletter_no').set
197
+ expect(browser.radio(id: 'new_user_newsletter_no')).to be_set
198
+ end
199
+
200
+ it 'sets the radio button when found by :xpath' do
201
+ browser.radio(xpath: "//input[@id='new_user_newsletter_no']").set
202
+ expect(browser.radio(xpath: "//input[@id='new_user_newsletter_no']")).to be_set
203
+ end
204
+
205
+ it 'fires the onclick event' do
206
+ browser.radio(id: 'new_user_newsletter_no').set
207
+ browser.radio(id: 'new_user_newsletter_yes').set
208
+ expect(messages).to eq ['clicked: new_user_newsletter_no', 'clicked: new_user_newsletter_yes']
209
+ end
210
+
211
+ it 'fires the onchange event' do
212
+ browser.radio(value: 'certainly').set
213
+ expect(messages).to eq ['changed: new_user_newsletter']
214
+
215
+ browser.radio(value: 'certainly').set
216
+ expect(messages).to eq ['changed: new_user_newsletter'] # no event fired here - didn't change
217
+
218
+ browser.radio(value: 'yes').set
219
+ browser.radio(value: 'certainly').set
220
+ list = ['changed: new_user_newsletter', 'clicked: new_user_newsletter_yes', 'changed: new_user_newsletter']
221
+ expect(messages).to eq list
222
+ end
223
+
224
+ it "raises UnknownObjectException if the radio button doesn't exist" do
225
+ expect { browser.radio(name: 'no_such_name').set }.to raise_unknown_object_exception
226
+ expect { browser.radio(xpath: "//input[@name='no_such_name']").set }.to raise_unknown_object_exception
227
+ end
228
+
229
+ it 'raises ObjectDisabledException if the radio is disabled' do
230
+ expect { browser.radio(id: 'new_user_newsletter_nah').set }.to raise_object_disabled_exception
231
+ expect { browser.radio(xpath: "//input[@id='new_user_newsletter_nah']").set }.to raise_object_disabled_exception
232
+ end
233
+ end
234
+
235
+ # Other
236
+ describe '#set?' do
237
+ it 'returns true if the radio button is set' do
238
+ expect(browser.radio(id: 'new_user_newsletter_yes')).to be_set
239
+ end
240
+
241
+ it 'returns false if the radio button unset' do
242
+ expect(browser.radio(id: 'new_user_newsletter_no')).not_to be_set
243
+ end
244
+
245
+ it 'returns the state for radios with string values' do
246
+ expect(browser.radio(name: 'new_user_newsletter', value: 'no')).not_to be_set
247
+ browser.radio(name: 'new_user_newsletter', value: 'no').set
248
+ expect(browser.radio(name: 'new_user_newsletter', value: 'no')).to be_set
249
+ browser.radio(name: 'new_user_newsletter', value: 'yes').set
250
+ expect(browser.radio(name: 'new_user_newsletter', value: 'no')).not_to be_set
251
+ end
252
+
253
+ it "raises UnknownObjectException if the radio button doesn't exist" do
254
+ expect { browser.radio(id: 'no_such_id').set? }.to raise_unknown_object_exception
255
+ expect { browser.radio(xpath: "//input[@id='no_such_id']").set? }.to raise_unknown_object_exception
256
+ end
255
257
  end
256
258
  end
257
259
  end