watir-webdriver 0.0.1.dev

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 (125) hide show
  1. data/.document +5 -0
  2. data/.gitignore +5 -0
  3. data/.gitmodules +3 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +32 -0
  6. data/Rakefile +107 -0
  7. data/TODO +15 -0
  8. data/VERSION +1 -0
  9. data/lib/watir-webdriver.rb +74 -0
  10. data/lib/watir-webdriver/base_element.rb +347 -0
  11. data/lib/watir-webdriver/browser.rb +130 -0
  12. data/lib/watir-webdriver/browserbot.js +34 -0
  13. data/lib/watir-webdriver/collections/buttons_collection.rb +13 -0
  14. data/lib/watir-webdriver/collections/element_collection.rb +45 -0
  15. data/lib/watir-webdriver/collections/table_rows_collection.rb +14 -0
  16. data/lib/watir-webdriver/collections/text_fields_collection.rb +13 -0
  17. data/lib/watir-webdriver/container.rb +24 -0
  18. data/lib/watir-webdriver/core_ext/string.rb +22 -0
  19. data/lib/watir-webdriver/elements/button.rb +27 -0
  20. data/lib/watir-webdriver/elements/checkbox.rb +23 -0
  21. data/lib/watir-webdriver/elements/file_field.rb +20 -0
  22. data/lib/watir-webdriver/elements/form.rb +11 -0
  23. data/lib/watir-webdriver/elements/generated.rb +941 -0
  24. data/lib/watir-webdriver/elements/headings.rb +48 -0
  25. data/lib/watir-webdriver/elements/hidden.rb +18 -0
  26. data/lib/watir-webdriver/elements/image.rb +33 -0
  27. data/lib/watir-webdriver/elements/input.rb +39 -0
  28. data/lib/watir-webdriver/elements/link.rb +13 -0
  29. data/lib/watir-webdriver/elements/option.rb +36 -0
  30. data/lib/watir-webdriver/elements/radio.rb +23 -0
  31. data/lib/watir-webdriver/elements/select_list.rb +73 -0
  32. data/lib/watir-webdriver/elements/shared_radio_checkbox.rb +13 -0
  33. data/lib/watir-webdriver/elements/table.rb +18 -0
  34. data/lib/watir-webdriver/elements/table_row.rb +17 -0
  35. data/lib/watir-webdriver/elements/text_field.rb +60 -0
  36. data/lib/watir-webdriver/exception.rb +20 -0
  37. data/lib/watir-webdriver/locators/button_locator.rb +57 -0
  38. data/lib/watir-webdriver/locators/element_locator.rb +269 -0
  39. data/lib/watir-webdriver/locators/table_row_locator.rb +25 -0
  40. data/lib/watir-webdriver/locators/text_field_locator.rb +61 -0
  41. data/lib/watir-webdriver/xpath_support.rb +23 -0
  42. data/spec/element_locator_spec.rb +11 -0
  43. data/spec/spec_helper.rb +16 -0
  44. data/spec/watirspec/area_spec.rb +78 -0
  45. data/spec/watirspec/areas_spec.rb +31 -0
  46. data/spec/watirspec/browser_spec.rb +262 -0
  47. data/spec/watirspec/button_spec.rb +242 -0
  48. data/spec/watirspec/buttons_spec.rb +48 -0
  49. data/spec/watirspec/checkbox_spec.rb +272 -0
  50. data/spec/watirspec/checkboxes_spec.rb +32 -0
  51. data/spec/watirspec/dd_spec.rb +136 -0
  52. data/spec/watirspec/dds_spec.rb +31 -0
  53. data/spec/watirspec/div_spec.rb +222 -0
  54. data/spec/watirspec/divs_spec.rb +31 -0
  55. data/spec/watirspec/dl_spec.rb +136 -0
  56. data/spec/watirspec/dls_spec.rb +32 -0
  57. data/spec/watirspec/dt_spec.rb +136 -0
  58. data/spec/watirspec/dts_spec.rb +31 -0
  59. data/spec/watirspec/element_spec.rb +87 -0
  60. data/spec/watirspec/em_spec.rb +110 -0
  61. data/spec/watirspec/ems_spec.rb +32 -0
  62. data/spec/watirspec/filefield_spec.rb +119 -0
  63. data/spec/watirspec/filefields_spec.rb +32 -0
  64. data/spec/watirspec/form_spec.rb +63 -0
  65. data/spec/watirspec/forms_spec.rb +33 -0
  66. data/spec/watirspec/frame_spec.rb +140 -0
  67. data/spec/watirspec/frames_spec.rb +62 -0
  68. data/spec/watirspec/hidden_spec.rb +102 -0
  69. data/spec/watirspec/hiddens_spec.rb +32 -0
  70. data/spec/watirspec/hn_spec.rb +93 -0
  71. data/spec/watirspec/hns_spec.rb +38 -0
  72. data/spec/watirspec/image_spec.rb +207 -0
  73. data/spec/watirspec/images_spec.rb +31 -0
  74. data/spec/watirspec/label_spec.rb +75 -0
  75. data/spec/watirspec/labels_spec.rb +31 -0
  76. data/spec/watirspec/li_spec.rb +127 -0
  77. data/spec/watirspec/lib/guards.rb +59 -0
  78. data/spec/watirspec/lib/server.rb +127 -0
  79. data/spec/watirspec/lib/spec_helper.rb +79 -0
  80. data/spec/watirspec/lib/watirspec.rb +72 -0
  81. data/spec/watirspec/link_spec.rb +165 -0
  82. data/spec/watirspec/links_spec.rb +35 -0
  83. data/spec/watirspec/lis_spec.rb +31 -0
  84. data/spec/watirspec/map_spec.rb +92 -0
  85. data/spec/watirspec/maps_spec.rb +32 -0
  86. data/spec/watirspec/meta_spec.rb +22 -0
  87. data/spec/watirspec/metas_spec.rb +30 -0
  88. data/spec/watirspec/ol_spec.rb +78 -0
  89. data/spec/watirspec/ols_spec.rb +31 -0
  90. data/spec/watirspec/option_spec.rb +173 -0
  91. data/spec/watirspec/p_spec.rb +143 -0
  92. data/spec/watirspec/pre_spec.rb +125 -0
  93. data/spec/watirspec/pres_spec.rb +31 -0
  94. data/spec/watirspec/ps_spec.rb +31 -0
  95. data/spec/watirspec/radio_spec.rb +278 -0
  96. data/spec/watirspec/radios_spec.rb +32 -0
  97. data/spec/watirspec/select_list_spec.rb +318 -0
  98. data/spec/watirspec/select_lists_spec.rb +35 -0
  99. data/spec/watirspec/span_spec.rb +157 -0
  100. data/spec/watirspec/spans_spec.rb +57 -0
  101. data/spec/watirspec/spec_helper.rb +17 -0
  102. data/spec/watirspec/strong_spec.rb +89 -0
  103. data/spec/watirspec/strongs_spec.rb +32 -0
  104. data/spec/watirspec/table_bodies_spec.rb +45 -0
  105. data/spec/watirspec/table_body_spec.rb +98 -0
  106. data/spec/watirspec/table_cell_spec.rb +68 -0
  107. data/spec/watirspec/table_cells_spec.rb +47 -0
  108. data/spec/watirspec/table_footer_spec.rb +85 -0
  109. data/spec/watirspec/table_footers_spec.rb +47 -0
  110. data/spec/watirspec/table_header_spec.rb +85 -0
  111. data/spec/watirspec/table_headers_spec.rb +45 -0
  112. data/spec/watirspec/table_row_spec.rb +87 -0
  113. data/spec/watirspec/table_rows_spec.rb +50 -0
  114. data/spec/watirspec/table_spec.rb +166 -0
  115. data/spec/watirspec/tables_spec.rb +33 -0
  116. data/spec/watirspec/text_field_spec.rb +276 -0
  117. data/spec/watirspec/text_fields_spec.rb +35 -0
  118. data/spec/watirspec/ul_spec.rb +76 -0
  119. data/spec/watirspec/uls_spec.rb +33 -0
  120. data/spec/xpath_builder_spec.rb +49 -0
  121. data/support/html5/html5.idl +815 -0
  122. data/support/html5/html5_extras.idl +147 -0
  123. data/support/html5/idl_extractor.rb +73 -0
  124. data/support/html5/watir_visitor.rb +169 -0
  125. metadata +220 -0
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Buttons" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
8
+ end
9
+
10
+ describe "#length" do
11
+ bug "WTR-349", :watir do
12
+ it "returns the number of buttons" do
13
+ browser.buttons.length.should == 8
14
+ end
15
+ end
16
+ end
17
+
18
+ describe "#[]" do
19
+ it "returns the button at the given index" do
20
+ browser.buttons[0].title.should == "Submit the form"
21
+ end
22
+ end
23
+
24
+ describe "#first" do
25
+ it "returns the first element in the collection" do
26
+ browser.buttons.first.value.should == browser.buttons[0].value
27
+ end
28
+ end
29
+
30
+ describe "#last" do
31
+ bug "WTR-349", :watir do
32
+ it "returns the last element in the collection" do
33
+ browser.buttons.last.value.should == browser.buttons[-1].value
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "#each" do
39
+ it "iterates through buttons correctly" do
40
+ browser.buttons.each_with_index do |b, index|
41
+ b.name.should == browser.button(:index, index).name
42
+ b.id.should == browser.button(:index, index).id
43
+ b.value.should == browser.button(:index, index).value
44
+ end
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,272 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "CheckBox" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
8
+ end
9
+
10
+ # Exists method
11
+
12
+ describe "#exists?" do
13
+ it "returns true if the checkbox button exists" do
14
+ browser.checkbox(:id, "new_user_interests_books").should exist
15
+ browser.checkbox(:id, /new_user_interests_books/).should exist
16
+ browser.checkbox(:name, "new_user_interests").should exist
17
+ browser.checkbox(:name, /new_user_interests/).should exist
18
+ browser.checkbox(:value, "books").should exist
19
+ browser.checkbox(:value, /books/).should exist
20
+ # not sure what :text is supposed to represent here
21
+ # browser.checkbox(:text, "books").should exist
22
+ # browser.checkbox(:text, /books/).should exist
23
+ browser.checkbox(:class, "fun").should exist
24
+ browser.checkbox(:class, /fun/).should exist
25
+ browser.checkbox(:index, 0).should exist
26
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should exist
27
+ end
28
+
29
+ it "returns true if the checkbox button exists (search by name and value)" do
30
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').should exist
31
+ browser.checkbox(:xpath, "//input[@name='new_user_interests' and @value='cars']").set
32
+ end
33
+
34
+ it "returns false if the checkbox button does not exist" do
35
+ browser.checkbox(:id, "no_such_id").should_not exist
36
+ browser.checkbox(:id, /no_such_id/).should_not exist
37
+ browser.checkbox(:name, "no_such_name").should_not exist
38
+ browser.checkbox(:name, /no_such_name/).should_not exist
39
+ browser.checkbox(:value, "no_such_value").should_not exist
40
+ browser.checkbox(:value, /no_such_value/).should_not exist
41
+ browser.checkbox(:text, "no_such_text").should_not exist
42
+ browser.checkbox(:text, /no_such_text/).should_not exist
43
+ browser.checkbox(:class, "no_such_class").should_not exist
44
+ browser.checkbox(:class, /no_such_class/).should_not exist
45
+ browser.checkbox(:index, 1337).should_not exist
46
+ browser.checkbox(:xpath, "//input[@id='no_such_id']").should_not exist
47
+ end
48
+
49
+ it "returns false if the checkbox button does not exist (search by name and value)" do
50
+ browser.checkbox(:name => "new_user_interests", :value => 'no_such_value').should_not exist
51
+ browser.checkbox(:xpath, "//input[@name='new_user_interests' and @value='no_such_value']").should_not exist
52
+ browser.checkbox(:name => "no_such_name", :value => 'cars').should_not exist
53
+ browser.checkbox(:xpath, "//input[@name='no_such_name' and @value='cars']").should_not exist
54
+ end
55
+
56
+ it "returns true for checkboxs with a string value" do
57
+ browser.checkbox(:name => 'new_user_interests', :value => 'books').should exist
58
+ browser.checkbox(:name => 'new_user_interests', :value => 'cars').should exist
59
+ end
60
+
61
+ it "raises TypeError when 'what' argument is invalid" do
62
+ lambda { browser.checkbox(:id, 3.14).exists? }.should raise_error(TypeError)
63
+ end
64
+
65
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
66
+ lambda { browser.checkbox(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
67
+ end
68
+ end
69
+
70
+ # Attribute methods
71
+
72
+ describe "#class_name" do
73
+ it "returns the class name if the checkbox exists and has an attribute" do
74
+ browser.checkbox(:id, "new_user_interests_dancing").class_name.should == "fun"
75
+ end
76
+
77
+ it "returns an emptry string if the checkbox exists and the attribute doesn't" do
78
+ browser.checkbox(:id, "new_user_interests_books").class_name.should == ""
79
+ end
80
+
81
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
82
+ lambda { browser.checkbox(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
83
+ end
84
+ end
85
+
86
+ describe "#id" do
87
+ it "returns the id attribute if the checkbox exists and has an attribute" do
88
+ browser.checkbox(:index, 0).id.should == "new_user_interests_books"
89
+ end
90
+
91
+ it "returns an emptry string if the checkbox exists and the attribute doesn't" do
92
+ browser.checkbox(:index, 1).id.should == ""
93
+ end
94
+
95
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
96
+ lambda { browser.checkbox(:index, 1337).id }.should raise_error(UnknownObjectException)
97
+ end
98
+ end
99
+
100
+ describe "#name" do
101
+ it "returns the name attribute if the checkbox exists" do
102
+ browser.checkbox(:id, 'new_user_interests_books').name.should == "new_user_interests"
103
+ end
104
+
105
+ it "returns an empty string if the checkbox exists and the attribute doesn't" do
106
+ browser.checkbox(:id, 'new_user_interests_food').name.should == ""
107
+ end
108
+
109
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
110
+ lambda { browser.checkbox(:index, 1337).name }.should raise_error(UnknownObjectException)
111
+ end
112
+ end
113
+
114
+ describe "#title" do
115
+ it "returns the title attribute if the checkbox exists" do
116
+ browser.checkbox(:id, "new_user_interests_dancing").title.should == "Dancing is fun!"
117
+ end
118
+
119
+ it "returns an emptry string if the checkbox exists and the attribute doesn't" do
120
+ browser.checkbox(:id, "new_user_interests_books").title.should == ""
121
+ end
122
+
123
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
124
+ lambda { browser.checkbox(:index, 1337).title }.should raise_error(UnknownObjectException)
125
+ end
126
+ end
127
+
128
+ describe "#type" do
129
+ it "returns the type attribute if the checkbox exists" do
130
+ browser.checkbox(:index, 0).type.should == "checkbox"
131
+ end
132
+
133
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
134
+ lambda { browser.checkbox(:index, 1337).type }.should raise_error(UnknownObjectException)
135
+ end
136
+ end
137
+
138
+ describe "#value" do
139
+ it "returns the value attribute if the checkbox exists" do
140
+ browser.checkbox(:id, 'new_user_interests_books').value.should == 'books'
141
+ end
142
+
143
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
144
+ lambda { browser.checkbox(:index, 1337).value}.should raise_error(UnknownObjectException)
145
+ end
146
+ end
147
+
148
+ describe "#respond_to?" do
149
+ it "returns true for all attribute methods" do
150
+ browser.checkbox(:index, 0).should respond_to(:class_name)
151
+ browser.checkbox(:index, 0).should respond_to(:id)
152
+ browser.checkbox(:index, 0).should respond_to(:name)
153
+ browser.checkbox(:index, 0).should respond_to(:title)
154
+ browser.checkbox(:index, 0).should respond_to(:type)
155
+ browser.checkbox(:index, 0).should respond_to(:value)
156
+ end
157
+ end
158
+
159
+ # Access methods
160
+
161
+ describe "#enabled?" do
162
+ it "returns true if the checkbox button is enabled" do
163
+ browser.checkbox(:id, "new_user_interests_books").should be_enabled
164
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should be_enabled
165
+ end
166
+
167
+ it "returns false if the checkbox button is disabled" do
168
+ browser.checkbox(:id, "new_user_interests_dentistry").should_not be_enabled
169
+ browser.checkbox(:xpath,"//input[@id='new_user_interests_dentistry']").should_not be_enabled
170
+ end
171
+
172
+ it "raises UnknownObjectException if the checkbox button doesn't exist" do
173
+ lambda { browser.checkbox(:id, "no_such_id").enabled? }.should raise_error(UnknownObjectException)
174
+ lambda { browser.checkbox(:xpath, "//input[@id='no_such_id']").enabled? }.should raise_error(UnknownObjectException)
175
+ end
176
+ end
177
+
178
+ describe "#disabled?" do
179
+ it "returns true if the checkbox is disabled" do
180
+ browser.checkbox(:id, 'new_user_interests_dentistry').should be_disabled
181
+ end
182
+
183
+ it "returns false if the checkbox is enabled" do
184
+ browser.checkbox(:id, 'new_user_interests_books').should_not be_disabled
185
+ end
186
+
187
+ it "raises UnknownObjectException if the checkbox doesn't exist" do
188
+ lambda { browser.checkbox(:index, 1337).disabled? }.should raise_error(UnknownObjectException)
189
+ end
190
+ end
191
+
192
+ # Manipulation methods
193
+
194
+ describe "#clear" do
195
+ it "raises ObjectDisabledException if the checkbox is disabled" do
196
+ browser.checkbox(:id, "new_user_interests_dentistry").should_not be_set
197
+ lambda { browser.checkbox(:id, "new_user_interests_dentistry").clear }.should raise_error(ObjectDisabledException)
198
+ lambda { browser.checkbox(:xpath, "//input[@id='new_user_interests_dentistry']").clear }.should raise_error(ObjectDisabledException)
199
+ end
200
+
201
+ it "clears the checkbox button if it is set" do
202
+ browser.checkbox(:id, "new_user_interests_books").clear
203
+ browser.checkbox(:id, "new_user_interests_books").should_not be_set
204
+ end
205
+
206
+ it "clears the checkbox button when found by :xpath" do
207
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").clear
208
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_books']").should_not be_set
209
+ end
210
+
211
+ it "raises UnknownObjectException if the checkbox button doesn't exist" do
212
+ lambda { browser.checkbox(:name, "no_such_id").clear }.should raise_error(UnknownObjectException)
213
+ lambda { browser.checkbox(:xpath, "//input[@id='no_such_id']").clear }.should raise_error(UnknownObjectException)
214
+ end
215
+ end
216
+
217
+ describe "#set" do
218
+ it "sets the checkbox button" do
219
+ browser.checkbox(:id, "new_user_interests_cars").set
220
+ browser.checkbox(:id, "new_user_interests_cars").should be_set
221
+ end
222
+
223
+ it "sets the checkbox button when found by :xpath" do
224
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_cars']").set
225
+ browser.checkbox(:xpath, "//input[@id='new_user_interests_cars']").should be_set
226
+ end
227
+
228
+ it "fires the onclick event" do
229
+ browser.button(:id, "disabled_button").should be_disabled
230
+ browser.checkbox(:id, "toggle_button_checkbox").set
231
+ browser.button(:id, "disabled_button").should_not be_disabled
232
+ browser.checkbox(:id, "toggle_button_checkbox").clear
233
+ browser.button(:id, "disabled_button").should be_disabled
234
+ end
235
+
236
+ it "raises UnknownObjectException if the checkbox button doesn't exist" do
237
+ lambda { browser.checkbox(:name, "no_such_name").set }.should raise_error(UnknownObjectException)
238
+ lambda { browser.checkbox(:xpath, "//input[@name='no_such_name']").set }.should raise_error(UnknownObjectException)
239
+ end
240
+
241
+ it "raises ObjectDisabledException if the checkbox is disabled" do
242
+ lambda { browser.checkbox(:id, "new_user_interests_dentistry").set }.should raise_error(ObjectDisabledException)
243
+ lambda { browser.checkbox(:xpath, "//input[@id='new_user_interests_dentistry']").set }.should raise_error(ObjectDisabledException )
244
+ end
245
+ end
246
+
247
+ # Other
248
+
249
+ describe '#set?' do
250
+ it "returns true if the checkbox button is set" do
251
+ browser.checkbox(:id, "new_user_interests_books").should be_set
252
+ end
253
+
254
+ it "returns false if the checkbox button unset" do
255
+ browser.checkbox(:id, "new_user_interests_cars").should_not be_set
256
+ end
257
+
258
+ it "returns the state for checkboxs with string values" do
259
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').should_not be_set
260
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').set
261
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').should be_set
262
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').clear
263
+ browser.checkbox(:name => "new_user_interests", :value => 'cars').should_not be_set
264
+ end
265
+
266
+ it "raises UnknownObjectException if the checkbox button doesn't exist" do
267
+ lambda { browser.checkbox(:id, "no_such_id").set? }.should raise_error(UnknownObjectException)
268
+ lambda { browser.checkbox(:xpath, "//input[@id='no_such_id']").set? }.should raise_error(UnknownObjectException)
269
+ end
270
+ end
271
+
272
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "CheckBoxes" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
8
+ end
9
+
10
+ describe "#length" do
11
+ it "returns the number of checkboxes" do
12
+ browser.checkboxes.length.should == 7
13
+ end
14
+ end
15
+
16
+ describe "#[]" do
17
+ it "returns the checkbox at the given index" do
18
+ browser.checkboxes[0].id.should == "new_user_interests_books"
19
+ end
20
+ end
21
+
22
+ describe "#each" do
23
+ it "iterates through checkboxes correctly" do
24
+ browser.checkboxes.each_with_index do |c, index|
25
+ c.name.should == browser.checkbox(:index, index).name
26
+ c.id.should == browser.checkbox(:index, index).id
27
+ c.value.should == browser.checkbox(:index, index).value
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Dd" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/definition_lists.html")
8
+ end
9
+
10
+ # Exists method
11
+ describe "#exists?" do
12
+ it "returns true if the element exists" do
13
+ browser.dd(:id, "someone").should exist
14
+ browser.dd(:class, "name").should exist
15
+ browser.dd(:xpath, "//dd[@id='someone']").should exist
16
+ browser.dd(:index, 0).should exist
17
+ end
18
+
19
+ it "returns false if the element does not exist" do
20
+ browser.dd(:id, "no_such_id").should_not exist
21
+ end
22
+
23
+ it "raises TypeError when 'what' argument is invalid" do
24
+ lambda { browser.dd(:id, 3.14).exists? }.should raise_error(TypeError)
25
+ end
26
+
27
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
28
+ lambda { browser.dd(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
29
+ end
30
+ end
31
+
32
+ # Attribute methods
33
+ describe "#class_name" do
34
+ it "returns the class attribute if the element exists" do
35
+ browser.dd(:id, "someone").class_name.should == "name"
36
+ end
37
+
38
+ it "returns an empty string if the element exists but the attribute doesn't" do
39
+ browser.dd(:id, "city").class_name.should == ""
40
+ end
41
+
42
+ it "raises UnknownObjectException if the element does not exist" do
43
+ lambda { browser.dd(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
44
+ lambda { browser.dd(:title, "no_such_title").class_name }.should raise_error(UnknownObjectException)
45
+ lambda { browser.dd(:index, 1337).class_name }.should raise_error(UnknownObjectException)
46
+ lambda { browser.dd(:xpath, "//dd[@id='no_such_id']").class_name }.should raise_error(UnknownObjectException)
47
+ end
48
+ end
49
+
50
+ describe "#id" do
51
+ it "returns the id attribute if the element exists" do
52
+ browser.dd(:class, 'name').id.should == "someone"
53
+ end
54
+
55
+ it "returns an empty string if the element exists, but the attribute doesn't" do
56
+ browser.dd(:class, 'address').id.should == ""
57
+ end
58
+
59
+ it "raises UnknownObjectException if the element does not exist" do
60
+ lambda {browser.dd(:id, "no_such_id").id }.should raise_error(UnknownObjectException)
61
+ lambda {browser.dd(:title, "no_such_id").id }.should raise_error(UnknownObjectException)
62
+ lambda {browser.dd(:index, 1337).id }.should raise_error(UnknownObjectException)
63
+ end
64
+ end
65
+
66
+ describe "#title" do
67
+ it "returns the title of the element" do
68
+ browser.dd(:class, "name").title.should == "someone"
69
+ end
70
+ end
71
+
72
+ describe "#text" do
73
+ it "returns the text of the element" do
74
+ browser.dd(:id, "someone").text.should == "John Doe"
75
+ end
76
+
77
+ it "returns an empty string if the element exists but contains no text" do
78
+ browser.dd(:class, 'noop').text.should == ""
79
+ end
80
+
81
+ it "raises UnknownObjectException if the element does not exist" do
82
+ lambda { browser.dd(:id, "no_such_id").text }.should raise_error(UnknownObjectException)
83
+ lambda { browser.dd(:title, "no_such_title").text }.should raise_error(UnknownObjectException)
84
+ lambda { browser.dd(:index, 1337).text }.should raise_error(UnknownObjectException)
85
+ lambda { browser.dd(:xpath, "//dd[@id='no_such_id']").text }.should raise_error(UnknownObjectException)
86
+ end
87
+ end
88
+
89
+ describe "#respond_to?" do
90
+ it "returns true for all attribute methods" do
91
+ browser.dd(:index, 0).should respond_to(:id)
92
+ browser.dd(:index, 0).should respond_to(:class_name)
93
+ browser.dd(:index, 0).should respond_to(:style)
94
+ browser.dd(:index, 0).should respond_to(:text)
95
+ browser.dd(:index, 0).should respond_to(:title)
96
+ end
97
+ end
98
+
99
+ # Manipulation methods
100
+ describe "#click" do
101
+ it "fires events when clicked" do
102
+ browser.dd(:title, 'education').text.should_not == 'changed'
103
+ browser.dd(:title, 'education').click
104
+ browser.dd(:title, 'education').text.should == 'changed'
105
+ end
106
+
107
+ it "raises UnknownObjectException if the element does not exist" do
108
+ lambda { browser.dd(:id, "no_such_id").click }.should raise_error(UnknownObjectException)
109
+ lambda { browser.dd(:title, "no_such_title").click }.should raise_error(UnknownObjectException)
110
+ lambda { browser.dd(:index, 1337).click }.should raise_error(UnknownObjectException)
111
+ lambda { browser.dd(:xpath, "//dd[@id='no_such_id']").click }.should raise_error(UnknownObjectException)
112
+ end
113
+ end
114
+
115
+ describe "#html" do
116
+ it "returns the HTML of the element" do
117
+ html = browser.dd(:id, 'someone').html
118
+ html.should =~ /John Doe/m
119
+ html.should_not include('</body>')
120
+ end
121
+ end
122
+
123
+ describe "#to_s" do
124
+ bug "WTR-350", :watir do
125
+ it "returns a human readable representation of the element" do
126
+ browser.dd(:id, 'someone').to_s.should ==
127
+ %q{tag: dd
128
+ id: someone
129
+ class: name
130
+ title: someone
131
+ text: John Doe}
132
+ end
133
+ end
134
+ end
135
+
136
+ end