operawatir 0.3-jruby

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 (171) hide show
  1. data/.gitmodules +3 -0
  2. data/.yardopts +5 -0
  3. data/AUTHORS +7 -0
  4. data/Gemfile +9 -0
  5. data/LICENSE +30 -0
  6. data/README.md +158 -0
  7. data/Rakefile +59 -0
  8. data/VERSION +1 -0
  9. data/bin/desktopwatir +106 -0
  10. data/bin/operawatir +95 -0
  11. data/lib/operadriver/APACHE_2.0_LICENSE.txt +204 -0
  12. data/lib/operadriver/NEW_BSD_LICENSE.txt +36 -0
  13. data/lib/operadriver/commons-jxpath-1.3.jar +0 -0
  14. data/lib/operadriver/protobuf-java-2.3.0.jar +0 -0
  15. data/lib/operadriver/selenium-common.jar +0 -0
  16. data/lib/operadriver/webdriver-opera.jar +0 -0
  17. data/lib/operawatir.rb +46 -0
  18. data/lib/operawatir/browser.rb +181 -0
  19. data/lib/operawatir/collection.rb +133 -0
  20. data/lib/operawatir/compat.rb +25 -0
  21. data/lib/operawatir/compat/browser.rb +20 -0
  22. data/lib/operawatir/compat/collection.rb +99 -0
  23. data/lib/operawatir/compat/deprecation.rb +46 -0
  24. data/lib/operawatir/compat/element.rb +165 -0
  25. data/lib/operawatir/compat/element_finders.rb +159 -0
  26. data/lib/operawatir/compat/window.rb +27 -0
  27. data/lib/operawatir/element.rb +228 -0
  28. data/lib/operawatir/exceptions.rb +38 -0
  29. data/lib/operawatir/helper.rb +53 -0
  30. data/lib/operawatir/selector.rb +111 -0
  31. data/lib/operawatir/version.rb +15 -0
  32. data/lib/operawatir/window.rb +174 -0
  33. data/spec/fire_event/fire_event.rb +268 -0
  34. data/spec/fire_event/interactive/onBlur.html +45 -0
  35. data/spec/fire_event/interactive/onChange.html +47 -0
  36. data/spec/fire_event/interactive/onClick.html +45 -0
  37. data/spec/fire_event/interactive/onDblClick.html +45 -0
  38. data/spec/fire_event/interactive/onFocus.html +45 -0
  39. data/spec/fire_event/interactive/onMouseDown.html +45 -0
  40. data/spec/fire_event/interactive/onMouseMove.html +45 -0
  41. data/spec/fire_event/interactive/onMouseOut.html +45 -0
  42. data/spec/fire_event/interactive/onMouseOver.html +45 -0
  43. data/spec/fire_event/interactive/onMouseUp.html +45 -0
  44. data/spec/fire_event/interactive/onScroll.html +14 -0
  45. data/spec/legacy_watirspec/area_spec.rb +106 -0
  46. data/spec/legacy_watirspec/areas_spec.rb +38 -0
  47. data/spec/legacy_watirspec/browser_spec.rb +297 -0
  48. data/spec/legacy_watirspec/button_spec.rb +260 -0
  49. data/spec/legacy_watirspec/buttons_spec.rb +54 -0
  50. data/spec/legacy_watirspec/checkbox_spec.rb +280 -0
  51. data/spec/legacy_watirspec/checkboxes_spec.rb +38 -0
  52. data/spec/legacy_watirspec/collections_spec.rb +18 -0
  53. data/spec/legacy_watirspec/dd_spec.rb +140 -0
  54. data/spec/legacy_watirspec/dds_spec.rb +38 -0
  55. data/spec/legacy_watirspec/del_spec.rb +181 -0
  56. data/spec/legacy_watirspec/dels_spec.rb +62 -0
  57. data/spec/legacy_watirspec/div_spec.rb +244 -0
  58. data/spec/legacy_watirspec/divs_spec.rb +38 -0
  59. data/spec/legacy_watirspec/dl_spec.rb +140 -0
  60. data/spec/legacy_watirspec/dls_spec.rb +38 -0
  61. data/spec/legacy_watirspec/dt_spec.rb +140 -0
  62. data/spec/legacy_watirspec/dts_spec.rb +38 -0
  63. data/spec/legacy_watirspec/element_spec.rb +86 -0
  64. data/spec/legacy_watirspec/em_spec.rb +114 -0
  65. data/spec/legacy_watirspec/ems_spec.rb +38 -0
  66. data/spec/legacy_watirspec/filefield_spec.rb +127 -0
  67. data/spec/legacy_watirspec/filefields_spec.rb +38 -0
  68. data/spec/legacy_watirspec/fixtures/2000_spans.html +2009 -0
  69. data/spec/legacy_watirspec/fixtures/bug_duplicate_attributes.html +14 -0
  70. data/spec/legacy_watirspec/fixtures/bug_javascript_001.html +11 -0
  71. data/spec/legacy_watirspec/fixtures/buttons_with_duplicate_ids.html +18 -0
  72. data/spec/legacy_watirspec/fixtures/collections.html +15 -0
  73. data/spec/legacy_watirspec/fixtures/definition_lists.html +48 -0
  74. data/spec/legacy_watirspec/fixtures/euc-jp_text.html +17 -0
  75. data/spec/legacy_watirspec/fixtures/forms_with_input_elements.html +126 -0
  76. data/spec/legacy_watirspec/fixtures/frame_1.html +18 -0
  77. data/spec/legacy_watirspec/fixtures/frame_2.html +16 -0
  78. data/spec/legacy_watirspec/fixtures/frames.html +11 -0
  79. data/spec/legacy_watirspec/fixtures/iframes.html +12 -0
  80. data/spec/legacy_watirspec/fixtures/images.html +27 -0
  81. data/spec/legacy_watirspec/fixtures/images/1.gif +0 -0
  82. data/spec/legacy_watirspec/fixtures/images/2.gif +0 -0
  83. data/spec/legacy_watirspec/fixtures/images/3.gif +0 -0
  84. data/spec/legacy_watirspec/fixtures/images/button.jpg +0 -0
  85. data/spec/legacy_watirspec/fixtures/images/circle.jpg +0 -0
  86. data/spec/legacy_watirspec/fixtures/images/map.gif +0 -0
  87. data/spec/legacy_watirspec/fixtures/images/map2.gif +0 -0
  88. data/spec/legacy_watirspec/fixtures/images/minus.gif +0 -0
  89. data/spec/legacy_watirspec/fixtures/images/originaltriangle.jpg +0 -0
  90. data/spec/legacy_watirspec/fixtures/images/plus.gif +0 -0
  91. data/spec/legacy_watirspec/fixtures/images/square.jpg +0 -0
  92. data/spec/legacy_watirspec/fixtures/images/triangle.jpg +0 -0
  93. data/spec/legacy_watirspec/fixtures/iso-2022-jp_text.html +17 -0
  94. data/spec/legacy_watirspec/fixtures/javascript/helpers.js +16 -0
  95. data/spec/legacy_watirspec/fixtures/jquery.html +28 -0
  96. data/spec/legacy_watirspec/fixtures/latin1_text.html +17 -0
  97. data/spec/legacy_watirspec/fixtures/multiple_ids.html +14 -0
  98. data/spec/legacy_watirspec/fixtures/non_control_elements.html +135 -0
  99. data/spec/legacy_watirspec/fixtures/parser_bug_001.html +12 -0
  100. data/spec/legacy_watirspec/fixtures/prevent_form_submit.html +20 -0
  101. data/spec/legacy_watirspec/fixtures/right_click.html +11 -0
  102. data/spec/legacy_watirspec/fixtures/shift_jis_text.html +17 -0
  103. data/spec/legacy_watirspec/fixtures/tables.html +121 -0
  104. data/spec/legacy_watirspec/fixtures/timeout.html +16 -0
  105. data/spec/legacy_watirspec/fixtures/timeout_window_location.html +19 -0
  106. data/spec/legacy_watirspec/fixtures/tiny_mce.html +27 -0
  107. data/spec/legacy_watirspec/fixtures/utf8_text.html +15 -0
  108. data/spec/legacy_watirspec/fixtures/watirspec.css +0 -0
  109. data/spec/legacy_watirspec/form_spec.rb +73 -0
  110. data/spec/legacy_watirspec/forms_spec.rb +39 -0
  111. data/spec/legacy_watirspec/frame_spec.rb +161 -0
  112. data/spec/legacy_watirspec/frames_spec.rb +75 -0
  113. data/spec/legacy_watirspec/guards.rb +38 -0
  114. data/spec/legacy_watirspec/hidden_spec.rb +120 -0
  115. data/spec/legacy_watirspec/hiddens_spec.rb +38 -0
  116. data/spec/legacy_watirspec/hn_spec.rb +101 -0
  117. data/spec/legacy_watirspec/hns_spec.rb +39 -0
  118. data/spec/legacy_watirspec/image_spec.rb +237 -0
  119. data/spec/legacy_watirspec/images_spec.rb +38 -0
  120. data/spec/legacy_watirspec/ins_spec.rb +181 -0
  121. data/spec/legacy_watirspec/inses_spec.rb +62 -0
  122. data/spec/legacy_watirspec/label_spec.rb +85 -0
  123. data/spec/legacy_watirspec/labels_spec.rb +38 -0
  124. data/spec/legacy_watirspec/li_spec.rb +135 -0
  125. data/spec/legacy_watirspec/link_spec.rb +194 -0
  126. data/spec/legacy_watirspec/links_spec.rb +39 -0
  127. data/spec/legacy_watirspec/lis_spec.rb +38 -0
  128. data/spec/legacy_watirspec/map_spec.rb +100 -0
  129. data/spec/legacy_watirspec/maps_spec.rb +38 -0
  130. data/spec/legacy_watirspec/meta_spec.rb +26 -0
  131. data/spec/legacy_watirspec/metas_spec.rb +36 -0
  132. data/spec/legacy_watirspec/ol_spec.rb +86 -0
  133. data/spec/legacy_watirspec/ols_spec.rb +38 -0
  134. data/spec/legacy_watirspec/option_spec.rb +187 -0
  135. data/spec/legacy_watirspec/p_spec.rb +167 -0
  136. data/spec/legacy_watirspec/pre_spec.rb +133 -0
  137. data/spec/legacy_watirspec/pres_spec.rb +38 -0
  138. data/spec/legacy_watirspec/ps_spec.rb +38 -0
  139. data/spec/legacy_watirspec/radio_spec.rb +286 -0
  140. data/spec/legacy_watirspec/radios_spec.rb +35 -0
  141. data/spec/legacy_watirspec/select_list_spec.rb +326 -0
  142. data/spec/legacy_watirspec/select_lists_spec.rb +39 -0
  143. data/spec/legacy_watirspec/server.rb +91 -0
  144. data/spec/legacy_watirspec/span_spec.rb +181 -0
  145. data/spec/legacy_watirspec/spans_spec.rb +64 -0
  146. data/spec/legacy_watirspec/spec_helper.rb +12 -0
  147. data/spec/legacy_watirspec/strong_spec.rb +97 -0
  148. data/spec/legacy_watirspec/strongs_spec.rb +39 -0
  149. data/spec/legacy_watirspec/table_bodies_spec.rb +61 -0
  150. data/spec/legacy_watirspec/table_body_spec.rb +119 -0
  151. data/spec/legacy_watirspec/table_cell_spec.rb +76 -0
  152. data/spec/legacy_watirspec/table_cells_spec.rb +71 -0
  153. data/spec/legacy_watirspec/table_footer_spec.rb +94 -0
  154. data/spec/legacy_watirspec/table_footers_spec.rb +61 -0
  155. data/spec/legacy_watirspec/table_header_spec.rb +98 -0
  156. data/spec/legacy_watirspec/table_headers_spec.rb +59 -0
  157. data/spec/legacy_watirspec/table_row_spec.rb +104 -0
  158. data/spec/legacy_watirspec/table_rows_spec.rb +64 -0
  159. data/spec/legacy_watirspec/table_spec.rb +170 -0
  160. data/spec/legacy_watirspec/tables_spec.rb +40 -0
  161. data/spec/legacy_watirspec/text_field_spec.rb +315 -0
  162. data/spec/legacy_watirspec/text_fields_spec.rb +38 -0
  163. data/spec/legacy_watirspec/ul_spec.rb +84 -0
  164. data/spec/legacy_watirspec/uls_spec.rb +40 -0
  165. data/spec/legacy_watirspec/watir_compatibility_spec.rb +176 -0
  166. data/spec/legacy_watirspec/watirspec_helper.rb +57 -0
  167. data/utils/Rakefile +79 -0
  168. data/utils/launchers/launcher-linux-i686 +0 -0
  169. data/utils/launchers/launcher-linux-x86_64 +0 -0
  170. data/utils/launchers/launcher-win32-i86pc.exe +0 -0
  171. metadata +404 -0
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Inses" 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 inses" do
12
+ browser.inses.length.should == 5
13
+ end
14
+ end
15
+
16
+ describe "#[]" do
17
+ it "returns the ins at the given index" do
18
+ browser.inses[1].id.should == "lead"
19
+ end
20
+ end
21
+
22
+ describe "#each" do
23
+ it "iterates through inses correctly" do
24
+ count = 0
25
+
26
+ browser.inses.each_with_index do |s, index|
27
+ s.name.should == browser.ins(:index, index+1).name
28
+ s.id.should == browser.ins(:index, index+1).id
29
+ s.value.should == browser.ins(:index, index+1).value
30
+
31
+ count += 1
32
+ end
33
+
34
+ count.should > 0
35
+ end
36
+ end
37
+
38
+ describe "#to_s" do
39
+ bug "WTR-350", :watir do
40
+ it "returns a human readable representation of the collection" do
41
+ browser.inses.to_s.should == "tag: ins\n" +
42
+ " id: lead\n" +
43
+ " class: lead\n" +
44
+ " title: Lorem ipsum\n" +
45
+ " text: This is an inserted text tag 1\n" +
46
+ "tag: ins\n" +
47
+ " name: invalid_attribute\n" +
48
+ " value: invalid_attribute\n" +
49
+ " text: This is an inserted text tag 2\n" +
50
+ "tag: ins\n" +
51
+ " text: This is an inserted text tag 3\n" +
52
+ "tag: ins\n" +
53
+ "tag: ins\n" +
54
+ " class: footer\n" +
55
+ " name: footer\n" +
56
+ " onclick: this.innerHTML = 'This is an ins with text set by Javascript.'\n" +
57
+ " text: This is an ins."
58
+ end
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,85 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Label" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/forms_with_input_elements.html")
8
+ end
9
+
10
+ # Exists method
11
+ describe "#exists?" do
12
+ it "returns true if the element exists" do
13
+ browser.label(:id, 'first_label').should exist
14
+ browser.label(:id, /first_label/).should exist
15
+ browser.label(:text, 'First name').should exist
16
+ browser.label(:text, /First name/).should exist
17
+ browser.label(:index, 1).should exist
18
+ browser.label(:xpath, "//label[@id='first_label']").should exist
19
+ end
20
+
21
+ bug "WTR-361", :watir do
22
+ it "returns true if the element exists (default how = :text)" do
23
+ browser.label("First name").should exist
24
+ end
25
+ end
26
+
27
+ it "returns the first label if given no args" do
28
+ browser.label.should exist
29
+ end
30
+
31
+ it "returns false if the element does not exist" do
32
+ browser.label(:id, 'no_such_id').should_not exist
33
+ browser.label(:id, /no_such_id/).should_not exist
34
+ browser.label(:text, 'no_such_text').should_not exist
35
+ browser.label(:text, /no_such_text/).should_not exist
36
+ browser.label(:index, 1337).should_not exist
37
+ browser.label(:xpath, "//input[@id='no_such_id']").should_not exist
38
+ end
39
+
40
+ it "raises TypeError when 'what' argument is invalid" do
41
+ lambda { browser.label(:id, 3.14).exists? }.should raise_error(TypeError)
42
+ end
43
+
44
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
45
+ lambda { browser.label(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
46
+ end
47
+ end
48
+
49
+ describe "click" do
50
+ it "fires the onclick event" do
51
+ browser.label(:id, 'first_label').click
52
+ messages.first.should == 'label'
53
+ end
54
+ end
55
+
56
+ # Attribute methods
57
+ describe "#id" do
58
+ it "returns the id attribute if the label exists" do
59
+ browser.label(:index, 1).id.should == "first_label"
60
+ end
61
+
62
+ it "raises UnknownObjectException if the label doesn't exist" do
63
+ lambda { browser.label(:index, 1337).id }.should raise_error(UnknownObjectException)
64
+ end
65
+ end
66
+
67
+ describe "#for" do
68
+ it "returns the 'for' attribute if the label exists" do
69
+ browser.label(:index, 1).for.should == "new_user_first_name"
70
+ end
71
+
72
+ it "raises UnknownObjectException if the label doesn't exist" do
73
+ lambda { browser.label(:index, 1337).for }.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.label(:index, 1).should respond_to(:id)
80
+ browser.label(:index, 1).should respond_to(:for)
81
+ end
82
+ end
83
+
84
+
85
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Labels" 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 labels" do
12
+ browser.labels.length.should == 26 # changed this from 25 - Jari
13
+ end
14
+ end
15
+
16
+ describe "#[]" do
17
+ it "returns the label at the given index" do
18
+ browser.labels[1].id.should == "first_label"
19
+ end
20
+ end
21
+
22
+ describe "#each" do
23
+ it "iterates through labels correctly" do
24
+ count = 0
25
+
26
+ browser.labels.each_with_index do |l, index|
27
+ l.name.should == browser.label(:index, index+1).name
28
+ l.id.should == browser.label(:index, index+1).id
29
+ l.value.should == browser.label(:index, index+1).value
30
+
31
+ count += 1
32
+ end
33
+
34
+ count.should > 0
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,135 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Li" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
8
+ end
9
+
10
+ # Exists method
11
+ describe "#exist?" do
12
+ it "returns true if the 'li' exists" do
13
+ browser.li(:id, "non_link_1").should exist
14
+ browser.li(:id, /non_link_1/).should exist
15
+ browser.li(:text, "Non-link 3").should exist
16
+ browser.li(:text, /Non-link 3/).should exist
17
+ browser.li(:class, "nonlink").should exist
18
+ browser.li(:class, /nonlink/).should exist
19
+ browser.li(:index, 1).should exist
20
+ browser.li(:xpath, "//li[@id='non_link_1']").should exist
21
+ end
22
+
23
+ it "returns true if the element exists (default how = :id)" do
24
+ browser.li("non_link_1").should exist
25
+ end
26
+
27
+ it "returns the first element if given no args" do
28
+ browser.li.should exist
29
+ end
30
+
31
+ it "returns false if the 'li' doesn't exist" do
32
+ browser.li(:id, "no_such_id").should_not exist
33
+ browser.li(:id, /no_such_id/).should_not exist
34
+ browser.li(:text, "no_such_text").should_not exist
35
+ browser.li(:text, /no_such_text/).should_not exist
36
+ browser.li(:class, "no_such_class").should_not exist
37
+ browser.li(:class, /no_such_class/).should_not exist
38
+ browser.li(:index, 1337).should_not exist
39
+ browser.li(:xpath, "//li[@id='no_such_id']").should_not exist
40
+ end
41
+
42
+ it "raises TypeError when 'what' argument is invalid" do
43
+ lambda { browser.li(:id, 3.14).exists? }.should raise_error(TypeError)
44
+ end
45
+
46
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
47
+ lambda { browser.li(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
48
+ end
49
+ end
50
+
51
+ # Attribute methods
52
+ describe "#class_name" do
53
+ it "returns the class attribute" do
54
+ browser.li(:id, 'non_link_1').class_name.should == 'nonlink'
55
+ end
56
+
57
+ it "returns an empty string if the element exists and the attribute doesn't" do
58
+ browser.li(:index, 1).class_name.should == ''
59
+ end
60
+
61
+ it "raises UnknownObjectException if the li doesn't exist" do
62
+ lambda { browser.li(:id, 'no_such_id').class_name }.should raise_error(UnknownObjectException)
63
+ end
64
+ end
65
+
66
+ describe "#id" do
67
+ it "returns the id attribute" do
68
+ browser.li(:class, 'nonlink').id.should == "non_link_1"
69
+ end
70
+
71
+ it "returns an empty string if the element exists and the attribute doesn't" do
72
+ browser.li(:index, 1).id.should == ''
73
+ end
74
+
75
+ it "raises UnknownObjectException if the li doesn't exist" do
76
+ lambda { browser.li(:id, "no_such_id").id }.should raise_error(UnknownObjectException)
77
+ lambda { browser.li(:index, 1337).id }.should raise_error(UnknownObjectException)
78
+ end
79
+ end
80
+
81
+ describe "#title" do
82
+ it "returns the title attribute" do
83
+ browser.li(:id, 'non_link_1').title.should == 'This is not a link!'
84
+ end
85
+
86
+ it "returns an empty string if the element exists and the attribute doesn't" do
87
+ browser.li(:index, 1).title.should == ''
88
+ end
89
+
90
+ it "raises UnknownObjectException if the li doesn't exist" do
91
+ lambda { browser.li(:id, 'no_such_id').title }.should raise_error( UnknownObjectException)
92
+ lambda { browser.li(:xpath, "//li[@id='no_such_id']").title }.should raise_error( UnknownObjectException)
93
+ end
94
+ end
95
+
96
+ describe "#text" do
97
+ it "returns the text of the p" do
98
+ browser.li(:id, 'non_link_1').text.should == 'Non-link 1'
99
+ end
100
+
101
+ it "returns an empty string if the element doesn't contain any text" do
102
+ browser.li(:index, 1).text.should == ''
103
+ end
104
+
105
+ it "raises UnknownObjectException if the li doesn't exist" do
106
+ lambda { browser.li(:id, 'no_such_id').text }.should raise_error( UnknownObjectException)
107
+ lambda { browser.li(:xpath , "//li[@id='no_such_id']").text }.should raise_error( UnknownObjectException)
108
+ end
109
+ end
110
+
111
+ describe "#respond_to?" do
112
+ it "returns true for all attribute methods" do
113
+ browser.li(:index, 1).should respond_to(:class_name)
114
+ browser.li(:index, 1).should respond_to(:id)
115
+ browser.li(:index, 1).should respond_to(:text)
116
+ browser.li(:index, 1).should respond_to(:title)
117
+ end
118
+ end
119
+
120
+ # Other
121
+ describe "#to_s" do
122
+ it "returns a human readable representation of the element" do
123
+ browser.li(:id, 'non_link_1').to_s.should == "tag: li\n" +
124
+ " id: non_link_1\n" +
125
+ " class: nonlink\n" +
126
+ " title: This is not a link!\n" +
127
+ " text: Non-link 1"
128
+ end
129
+
130
+ it "raises UnknownObjectException if the li doesn't exist" do
131
+ lambda { browser.li(:xpath, "//li[@id='no_such_id']").to_s }.should raise_error( UnknownObjectException)
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,194 @@
1
+ # encoding: utf-8
2
+ require File.expand_path("../spec_helper", __FILE__)
3
+
4
+ describe "Link" do
5
+
6
+ before :each do
7
+ browser.goto(WatirSpec.files + "/non_control_elements.html")
8
+ end
9
+
10
+ # Exists method
11
+ describe "#exist?" do
12
+ it "returns true if the link exists" do
13
+ browser.link(:id, 'link_2').should exist
14
+ browser.link(:id, /link_2/).should exist
15
+ browser.link(:name, 'bad_attribute').should exist
16
+ browser.link(:name, /bad_attribute/).should exist
17
+ browser.link(:title, "link_title_2").should exist
18
+ browser.link(:title, /link_title_2/).should exist
19
+ browser.link(:text, "Link 2").should exist
20
+ browser.link(:text, /Link 2/i).should exist
21
+ browser.link(:url, 'non_control_elements.html').should exist
22
+ browser.link(:url, /non_control_elements.html/).should exist
23
+ browser.link(:index, 2).should exist
24
+ browser.link(:xpath, "//a[@id='link_2']").should exist
25
+ end
26
+
27
+ bug "WTR-365", :watir do
28
+ it "returns true if the element exists (default how = :href)" do
29
+ browser.link(/input_elements/).should exist
30
+ end
31
+ end
32
+
33
+ it "returns the first link if given no args" do
34
+ browser.link.should exist
35
+ end
36
+
37
+ it "strips spaces from URL attributes when locating elements" do
38
+ browser.link(:url, /strip_space$/).should exist
39
+ end
40
+
41
+ it "returns false if the link doesn't exist" do
42
+ browser.link(:id, 'no_such_id').should_not exist
43
+ browser.link(:id, /no_such_id/).should_not exist
44
+ browser.link(:name, 'no_such_name').should_not exist
45
+ browser.link(:name, /no_such_name/).should_not exist
46
+ browser.link(:title, "no_such_title").should_not exist
47
+ browser.link(:title, /no_such_title/).should_not exist
48
+ browser.link(:text, "no_such_text").should_not exist
49
+ browser.link(:text, /no_such_text/i).should_not exist
50
+ browser.link(:url, 'no_such_href').should_not exist
51
+ browser.link(:url, /no_such_href/).should_not exist
52
+ browser.link(:index, 1337).should_not exist
53
+ browser.link(:xpath, "//a[@id='no_such_id']").should_not exist
54
+ end
55
+
56
+ it "raises TypeError when 'what' argument is invalid" do
57
+ lambda { browser.link(:id, 3.14).exists? }.should raise_error(TypeError)
58
+ end
59
+
60
+ it "raises MissingWayOfFindingObjectException when 'how' argument is invalid" do
61
+ lambda { browser.link(:no_such_how, 'some_value').exists? }.should raise_error(MissingWayOfFindingObjectException)
62
+ end
63
+ end
64
+
65
+ # Attribute methods
66
+ describe "#class_name" do
67
+ it "returns the type attribute if the link exists" do
68
+ browser.link(:index, 2).class_name.should == "external"
69
+ end
70
+
71
+ it "returns an empty string if the link exists and the attribute doesn't" do
72
+ browser.link(:index, 1).class_name.should == ''
73
+ end
74
+
75
+ it "raises an UnknownObjectException if the link doesn't exist" do
76
+ lambda { browser.link(:index, 1337).class_name }.should raise_error(UnknownObjectException)
77
+ end
78
+ end
79
+
80
+ describe "#href" do
81
+ it "returns the href attribute if the link exists" do
82
+ browser.link(:index, 2).href.should match(/non_control_elements/)
83
+ end
84
+
85
+ it "returns an empty string if the link exists and the attribute doesn't" do
86
+ browser.link(:index, 1).href.should == ""
87
+ end
88
+
89
+ it "raises an UnknownObjectException if the link doesn't exist" do
90
+ lambda { browser.link(:index, 1337).href }.should raise_error(UnknownObjectException)
91
+ end
92
+ end
93
+
94
+ bug "WTR-366", :watir do
95
+ describe "#url" do
96
+ it "returns the href attribute" do
97
+ browser.link(:index, 2).url.should match(/non_control_elements/)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "#id" do
103
+ it "returns the id attribute if the link exists" do
104
+ browser.link(:index, 2).id.should == "link_2"
105
+ end
106
+
107
+ it "returns an empty string if the link exists and the attribute doesn't" do
108
+ browser.link(:index, 1).id.should == ""
109
+ end
110
+
111
+ it "raises an UnknownObjectException if the link doesn't exist" do
112
+ lambda { browser.link(:index, 1337).id }.should raise_error(UnknownObjectException)
113
+ end
114
+ end
115
+
116
+ describe "#name" do
117
+ it "returns the name attribute if the link exists" do
118
+ browser.link(:index, 3).name.should == "bad_attribute"
119
+ end
120
+
121
+ it "returns an empty string if the link exists and the attribute doesn't" do
122
+ browser.link(:index, 1).name.should == ''
123
+ end
124
+
125
+ it "raises an UnknownObjectException if the link doesn't exist" do
126
+ lambda { browser.link(:index, 1337).name }.should raise_error(UnknownObjectException)
127
+ end
128
+ end
129
+
130
+ describe "#text" do
131
+ it "returns the link text" do
132
+ browser.link(:index, 2).text.should == "Link 2"
133
+ end
134
+
135
+ it "returns an empty string if the link exists and contains no text" do
136
+ browser.link(:index, 1).text.should == ""
137
+ end
138
+
139
+ it "raises an UnknownObjectException if the link doesn't exist" do
140
+ lambda { browser.link(:index, 1337).text }.should raise_error(UnknownObjectException)
141
+ end
142
+ end
143
+
144
+ describe "#title" do
145
+ it "returns the type attribute if the link exists" do
146
+ browser.link(:index, 2).title.should == "link_title_2"
147
+ end
148
+
149
+ it "returns an empty string if the link exists and the attribute doesn't" do
150
+ browser.link(:index, 1).title.should == ""
151
+ end
152
+
153
+ it "raises an UnknownObjectException if the link doesn't exist" do
154
+ lambda { browser.link(:index, 1337).title }.should raise_error(UnknownObjectException)
155
+ end
156
+ end
157
+
158
+ describe "#respond_to?" do
159
+ it "returns true for all attribute methods" do
160
+ browser.link(:index, 1).should respond_to(:class_name)
161
+ browser.link(:index, 1).should respond_to(:href)
162
+ browser.link(:index, 1).should respond_to(:url)
163
+ browser.link(:index, 1).should respond_to(:id)
164
+ browser.link(:index, 1).should respond_to(:name)
165
+ browser.link(:index, 1).should respond_to(:style)
166
+ browser.link(:index, 1).should respond_to(:text)
167
+ browser.link(:index, 1).should respond_to(:title)
168
+ end
169
+ end
170
+
171
+ # Manipulation methods
172
+ describe "#click" do
173
+ it "finds an existing link by (:text, String) and click it" do
174
+ browser.link(:text, "Link 3").click
175
+ browser.text.include?("User administration").should be_true
176
+ end
177
+
178
+ it "finds an existing link by (:text, Regexp) and click it" do
179
+ browser.link(:url, /forms_with_input_elements/).click
180
+ browser.text.include?("User administration").should be_true
181
+ end
182
+
183
+ it "finds an existing link by (:index, Integer) and click it" do
184
+ browser.link(:index, 3).click
185
+ browser.text.include?("User administration").should be_true
186
+ end
187
+
188
+ it "raises an UnknownObjectException if the link doesn't exist" do
189
+ lambda { browser.link(:index, 1337).click }.should raise_error(UnknownObjectException)
190
+ end
191
+
192
+ end
193
+
194
+ end