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,136 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Dt" 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.dt(:id, "experience").should exist
14
+ browser.dt(:class, "current-industry").should exist
15
+ browser.dt(:xpath, "//dt[@id='experience']").should exist
16
+ browser.dt(:index, 0).should exist
17
+ end
18
+
19
+ it "returns false if the element does not exist" do
20
+ browser.dt(:id, "no_such_id").should_not exist
21
+ end
22
+
23
+ it "raises TypeError when 'what' argument is invalid" do
24
+ lambda { browser.dt(:id, 3.14).exists? }.should raise_error(TypeError)
25
+ end
26
+
27
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
28
+ lambda { browser.dt(: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.dt(:id , "experience").class_name.should == "industry"
36
+ end
37
+
38
+ it "returns an empty string if the element exists but the attribute doesn't" do
39
+ browser.dt(:id , "education").class_name.should == ""
40
+ end
41
+
42
+ it "raises UnknownObjectException if the element does not exist" do
43
+ lambda { browser.dt(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
44
+ lambda { browser.dt(:title, "no_such_title").class_name }.should raise_error(UnknownObjectException)
45
+ lambda { browser.dt(:index, 1337).class_name }.should raise_error(UnknownObjectException)
46
+ lambda { browser.dt(:xpath, "//dt[@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.dt(:class, 'industry').id.should == "experience"
53
+ end
54
+
55
+ it "returns an empty string if the element exists, but the attribute doesn't" do
56
+ browser.dt(:class, 'current-industry').id.should == ""
57
+ end
58
+
59
+ it "raises UnknownObjectException if the element does not exist" do
60
+ lambda {browser.dt(:id, "no_such_id").id }.should raise_error(UnknownObjectException)
61
+ lambda {browser.dt(:title, "no_such_id").id }.should raise_error(UnknownObjectException)
62
+ lambda {browser.dt(: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.dt(:id, "experience").title.should == "experience"
69
+ end
70
+ end
71
+
72
+ describe "#text" do
73
+ it "returns the text of the element" do
74
+ browser.dt(:id, "experience").text.should == "Experience"
75
+ end
76
+
77
+ it "returns an empty string if the element exists but contains no text" do
78
+ browser.dt(:class, 'noop').text.should == ""
79
+ end
80
+
81
+ it "raises UnknownObjectException if the element does not exist" do
82
+ lambda { browser.dt(:id, "no_such_id").text }.should raise_error(UnknownObjectException)
83
+ lambda { browser.dt(:title, "no_such_title").text }.should raise_error(UnknownObjectException)
84
+ lambda { browser.dt(:index, 1337).text }.should raise_error(UnknownObjectException)
85
+ lambda { browser.dt(:xpath, "//dt[@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.dt(:index, 0).should respond_to(:id)
92
+ browser.dt(:index, 0).should respond_to(:class_name)
93
+ browser.dt(:index, 0).should respond_to(:style)
94
+ browser.dt(:index, 0).should respond_to(:text)
95
+ browser.dt(: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.dt(:id, 'education').text.should_not == 'changed'
103
+ browser.dt(:id, 'education').click
104
+ browser.dt(:id, 'education').text.should == 'changed'
105
+ end
106
+
107
+ it "raises UnknownObjectException if the element does not exist" do
108
+ lambda { browser.dt(:id, "no_such_id").click }.should raise_error(UnknownObjectException)
109
+ lambda { browser.dt(:title, "no_such_title").click }.should raise_error(UnknownObjectException)
110
+ lambda { browser.dt(:index, 1337).click }.should raise_error(UnknownObjectException)
111
+ lambda { browser.dt(:xpath, "//dt[@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.dt(:id, 'name').html
118
+ html.should =~ %r"<div>.*Name.*</div>"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.dt(:id, 'experience').to_s.should ==
127
+ %q{tag: dt
128
+ id: experience
129
+ class: industry
130
+ title: experience
131
+ text: Experience}
132
+ end
133
+ end
134
+ end
135
+
136
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Dts" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/definition_lists.html")
8
+ end
9
+
10
+ describe "#length" do
11
+ it "returns the number of dts" do
12
+ browser.dts.length.should == 11
13
+ end
14
+ end
15
+
16
+ describe "#[]" do
17
+ it "returns the dt at the given index" do
18
+ browser.dts[0].id.should == "experience"
19
+ end
20
+ end
21
+
22
+ describe "#each" do
23
+ it "iterates through dts correctly" do
24
+ browser.dts.each_with_index do |d, index|
25
+ d.id.should == browser.dt(:index, index).id
26
+ d.class_name.should == browser.dt(:index, index).class_name
27
+ end
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Element" do
5
+
6
+ Element = BaseElement if WatirSpec.implementation = :webdriver # hack
7
+
8
+ before :each do
9
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
10
+ end
11
+
12
+ describe ".new" do
13
+ it "finds elements matching the conditions when given a hash of :how => 'what' arguments" do
14
+ browser.checkbox(:name => 'new_user_interests', :title => 'Dancing is fun!').value.should == 'dancing'
15
+ browser.text_field(:class_name => 'name', :index => 1).id.should == 'new_user_last_name'
16
+ end
17
+
18
+ it "raises UnknownObjectException with a sane error message when given a hash of :how => 'what' arguments (non-existing object)" do
19
+ conditions = {:index => 100, :name => "foo"}
20
+ lambda { browser.text_field(conditions).id }.should raise_error(UnknownObjectException)
21
+ end
22
+
23
+ bug "WTR-351", :watir do
24
+ it "raises ArgumentError if given the wrong number of arguments" do
25
+ container = mock("container", :null_object => true)
26
+ lambda { Element.new(container, 1,2,3,4) }.should raise_error(ArgumentError)
27
+ lambda { Element.new(container, "foo") }.should raise_error(ArgumentError)
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "#focus" do
33
+ it "fires the onfocus event for the given element" do
34
+ tf = browser.text_field(:id, "new_user_occupation")
35
+ tf.value.should == "Developer"
36
+ tf.focus
37
+ browser.div(:id, "onfocus_test").text.should == "changed by onfocus event"
38
+ end
39
+ end
40
+
41
+ describe "#fire_event" do
42
+ it "should fire the given event" do
43
+ browser.div(:id, "onfocus_test").text.should be_empty
44
+ browser.text_field(:id, "new_user_occupation").fire_event('onfocus')
45
+ browser.div(:id, "onfocus_test").text.should == "changed by onfocus event"
46
+ end
47
+ end
48
+
49
+ describe "#parent" do
50
+ bug "WTR-352", :watir do
51
+ it "gets the parent of this element" do
52
+ browser.text_field(:id, "new_user_email").parent.should be_instance_of(FieldSet)
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#visible?" do
58
+ it "returns true if the element is visible" do
59
+ browser.text_field(:id, "new_user_email").should be_visible
60
+ end
61
+
62
+ it "returns false if the element is input element where type == 'hidden'" do
63
+ browser.text_field(:id, "new_user_interests_dolls").should_not be_visible
64
+ end
65
+
66
+ bug "WTR-336", :watir do
67
+ it "returns false if the element has style='display: none;'" do
68
+ browser.div(:id, 'changed_language').should_not be_visible
69
+ end
70
+ end
71
+
72
+ it "returns false if the element has style='visibility: hidden;" do
73
+ browser.div(:id, 'wants_newsletter').should_not be_visible
74
+ end
75
+
76
+ it "returns false if one of the parent elements is hidden" do
77
+ browser.div(:id, 'hidden_parent').should_not be_visible
78
+ end
79
+ end
80
+
81
+ describe "#exist?" do
82
+ it "doesn't raise when called on nested elements" do
83
+ browser.div(:id, 'no_such_div').link(:id, 'no_such_id').should_not exist
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,110 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Em" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
8
+ end
9
+
10
+ # Exists method
11
+ describe "#exists?" do
12
+ it "returns true if the element exists" do
13
+ browser.em(:id, "important-id").should exist
14
+ browser.em(:class, "important-class").should exist
15
+ browser.em(:xpath, "//em[@id='important-id']").should exist
16
+ browser.em(:index, 0).should exist
17
+ end
18
+
19
+ it "returns false if the element does not exist" do
20
+ browser.em(:id, "no_such_id").should_not exist
21
+ end
22
+
23
+ it "raises TypeError when 'what' argument is invalid" do
24
+ lambda { browser.em(:id, 3.14).exists? }.should raise_error(TypeError)
25
+ end
26
+
27
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
28
+ lambda { browser.em(: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.em(:id, "important-id").class_name.should == "important-class"
36
+ end
37
+
38
+ it "raises UnknownObjectException if the element does not exist" do
39
+ lambda { browser.em(:id, "no_such_id").class_name }.should raise_error(UnknownObjectException)
40
+ lambda { browser.em(:title, "no_such_title").class_name }.should raise_error(UnknownObjectException)
41
+ lambda { browser.em(:index, 1337).class_name }.should raise_error(UnknownObjectException)
42
+ lambda { browser.em(:xpath, "//em[@id='no_such_id']").class_name }.should raise_error(UnknownObjectException)
43
+ end
44
+ end
45
+
46
+ describe "#id" do
47
+ it "returns the id attribute if the element exists" do
48
+ browser.em(:class, 'important-class').id.should == "important-id"
49
+ end
50
+
51
+ it "raises UnknownObjectException if the element does not exist" do
52
+ lambda {browser.em(:id, "no_such_id").id }.should raise_error(UnknownObjectException)
53
+ lambda {browser.em(:title, "no_such_id").id }.should raise_error(UnknownObjectException)
54
+ lambda {browser.em(:index, 1337).id }.should raise_error(UnknownObjectException)
55
+ end
56
+ end
57
+
58
+ describe "#title" do
59
+ it "returns the title of the element" do
60
+ browser.em(:class, "important-class").title.should == "ergo cogito"
61
+ end
62
+ end
63
+
64
+ describe "#text" do
65
+ it "returns the text of the element" do
66
+ browser.em(:id, "important-id").text.should == "ergo cogito"
67
+ end
68
+
69
+ it "raises UnknownObjectException if the element does not exist" do
70
+ lambda { browser.em(:id, "no_such_id").text }.should raise_error(UnknownObjectException)
71
+ lambda { browser.em(:title, "no_such_title").text }.should raise_error(UnknownObjectException)
72
+ lambda { browser.em(:index, 1337).text }.should raise_error(UnknownObjectException)
73
+ lambda { browser.em(:xpath, "//em[@id='no_such_id']").text }.should raise_error(UnknownObjectException)
74
+ end
75
+ end
76
+
77
+ describe "#respond_to?" do
78
+ it "returns true for all attribute methods" do
79
+ browser.em(:index, 0).should respond_to(:id)
80
+ browser.em(:index, 0).should respond_to(:class_name)
81
+ browser.em(:index, 0).should respond_to(:style)
82
+ browser.em(:index, 0).should respond_to(:text)
83
+ browser.em(:index, 0).should respond_to(:title)
84
+ end
85
+ end
86
+
87
+ # Manipulation methods
88
+ describe "#click" do
89
+ it "raises UnknownObjectException if the element does not exist" do
90
+ lambda { browser.em(:id, "no_such_id").click }.should raise_error(UnknownObjectException)
91
+ lambda { browser.em(:title, "no_such_title").click }.should raise_error(UnknownObjectException)
92
+ lambda { browser.em(:index, 1337).click }.should raise_error(UnknownObjectException)
93
+ lambda { browser.em(:xpath, "//em[@id='no_such_id']").click }.should raise_error(UnknownObjectException)
94
+ end
95
+ end
96
+
97
+ describe "#to_s" do
98
+ bug "WTR-350", :watir do
99
+ it "returns a human readable representation of the element" do
100
+ browser.em(:id, 'important-id').to_s.should ==
101
+ %q{tag: em
102
+ class: important-class
103
+ id: important-id
104
+ title: ergo cogito
105
+ text: ergo cogito}
106
+ end
107
+ end
108
+ end
109
+
110
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "Ems" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
8
+ end
9
+
10
+ describe "#length" do
11
+ it "returns the number of ems" do
12
+ browser.ems.length.should == 1
13
+ end
14
+ end
15
+
16
+ describe "#[]" do
17
+ it "returns the em at the given index" do
18
+ browser.ems[0].id.should == "important-id"
19
+ end
20
+ end
21
+
22
+ describe "#each" do
23
+ it "iterates through ems correctly" do
24
+ browser.ems.each_with_index do |e, index|
25
+ e.text.should == browser.em(:index, index).text
26
+ e.id.should == browser.em(:index, index).id
27
+ e.class_name.should == browser.em(:index, index).class_name
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+
4
+ describe "FileField" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
8
+ end
9
+
10
+ describe "#exist?" do
11
+ it "returns true if the file field exists" do
12
+ browser.file_field(:id, 'new_user_portrait').should exist
13
+ browser.file_field(:id, /new_user_portrait/).should exist
14
+ browser.file_field(:name, 'new_user_portrait').should exist
15
+ browser.file_field(:name, /new_user_portrait/).should exist
16
+ browser.file_field(:class, 'portrait').should exist
17
+ browser.file_field(:class, /portrait/).should exist
18
+ browser.file_field(:index, 0).should exist
19
+ browser.file_field(:xpath, "//input[@id='new_user_portrait']").should exist
20
+ end
21
+
22
+ it "returns false if the file field doesn't exist" do
23
+ browser.file_field(:id, 'no_such_id').should_not exist
24
+ browser.file_field(:id, /no_such_id/).should_not exist
25
+ browser.file_field(:name, 'no_such_name').should_not exist
26
+ browser.file_field(:name, /no_such_name/).should_not exist
27
+ browser.file_field(:class, 'no_such_class').should_not exist
28
+ browser.file_field(:class, /no_such_class/).should_not exist
29
+ browser.file_field(:index, 1337).should_not exist
30
+ browser.file_field(:xpath, "//input[@id='no_such_id']").should_not exist
31
+ end
32
+
33
+ it "raises TypeError when 'what' argument is invalid" do
34
+ lambda { browser.file_field(:id, 3.14).exists? }.should raise_error(TypeError)
35
+ end
36
+
37
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
38
+ lambda { browser.file_field(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
39
+ end
40
+ end
41
+
42
+ # Attribute methods
43
+
44
+ describe "#class_name" do
45
+ it "returns the class attribute if the text field exists" do
46
+ browser.file_field(:index, 0).class_name.should == "portrait"
47
+ end
48
+
49
+ it "raises UnknownObjectException if the text field doesn't exist" do
50
+ lambda { browser.file_field(:index, 1337).class_name }.should raise_error(UnknownObjectException)
51
+ end
52
+ end
53
+
54
+ describe "#id" do
55
+ it "returns the id attribute if the text field exists" do
56
+ browser.file_field(:index, 0).id.should == "new_user_portrait"
57
+ end
58
+
59
+ it "raises UnknownObjectException if the text field doesn't exist" do
60
+ lambda { browser.file_field(:index, 1337).id }.should raise_error(UnknownObjectException)
61
+ end
62
+ end
63
+
64
+ describe "#name" do
65
+ it "returns the name attribute if the text field exists" do
66
+ browser.file_field(:index, 0).name.should == "new_user_portrait"
67
+ end
68
+
69
+ it "raises UnknownObjectException if the text field doesn't exist" do
70
+ lambda { browser.file_field(:index, 1337).name }.should raise_error(UnknownObjectException)
71
+ end
72
+ end
73
+
74
+ describe "#title" do
75
+ it "returns the title attribute if the text field exists" do
76
+ browser.file_field(:id, "new_user_portrait").title.should == "Smile!"
77
+ end
78
+ end
79
+
80
+ describe "#type" do
81
+ it "returns the type attribute if the text field exists" do
82
+ browser.file_field(:index, 0).type.should == "file"
83
+ end
84
+
85
+ it "raises UnknownObjectException if the text field doesn't exist" do
86
+ lambda { browser.file_field(:index, 1337).type }.should raise_error(UnknownObjectException)
87
+ end
88
+ end
89
+
90
+ describe "#respond_to?" do
91
+ it "returns true for all attribute methods" do
92
+ browser.file_field(:index, 0).should respond_to(:class_name)
93
+ browser.file_field(:index, 0).should respond_to(:id)
94
+ browser.file_field(:index, 0).should respond_to(:name)
95
+ browser.file_field(:index, 0).should respond_to(:title)
96
+ browser.file_field(:index, 0).should respond_to(:type)
97
+ browser.file_field(:index, 0).should respond_to(:value)
98
+ end
99
+ end
100
+
101
+ # Manipulation methods
102
+
103
+ describe "#set" do
104
+ bug "WTR-336", :watir do
105
+ it "is able to set a file path in the field and click the upload button and fire the onchange event" do
106
+ browser.goto("#{WatirSpec.host}/forms_with_input_elements.html")
107
+
108
+ path = File.expand_path(__FILE__)
109
+
110
+ browser.file_field(:name, "new_user_portrait").set path
111
+ browser.file_field(:name, "new_user_portrait").value.should == path
112
+ messages.first.should == path
113
+ browser.button(:name, "new_user_submit").click
114
+ end
115
+ end
116
+
117
+ end
118
+
119
+ end