browserstack-webdriver 0.0.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 (202) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +791 -0
  3. data/README.md +31 -0
  4. data/build.desc +334 -0
  5. data/lib/selenium-client.rb +2 -0
  6. data/lib/selenium-webdriver.rb +1 -0
  7. data/lib/selenium/client.rb +37 -0
  8. data/lib/selenium/client/base.rb +132 -0
  9. data/lib/selenium/client/driver.rb +10 -0
  10. data/lib/selenium/client/errors.rb +9 -0
  11. data/lib/selenium/client/extensions.rb +118 -0
  12. data/lib/selenium/client/idiomatic.rb +488 -0
  13. data/lib/selenium/client/javascript_expression_builder.rb +116 -0
  14. data/lib/selenium/client/javascript_frameworks/jquery.rb +13 -0
  15. data/lib/selenium/client/javascript_frameworks/prototype.rb +13 -0
  16. data/lib/selenium/client/legacy_driver.rb +1720 -0
  17. data/lib/selenium/client/protocol.rb +104 -0
  18. data/lib/selenium/client/selenium_helper.rb +34 -0
  19. data/lib/selenium/rake/server_task.rb +157 -0
  20. data/lib/selenium/server.rb +248 -0
  21. data/lib/selenium/webdriver.rb +71 -0
  22. data/lib/selenium/webdriver/android.rb +9 -0
  23. data/lib/selenium/webdriver/android/bridge.rb +47 -0
  24. data/lib/selenium/webdriver/chrome.rb +26 -0
  25. data/lib/selenium/webdriver/chrome/bridge.rb +120 -0
  26. data/lib/selenium/webdriver/chrome/profile.rb +90 -0
  27. data/lib/selenium/webdriver/chrome/service.rb +75 -0
  28. data/lib/selenium/webdriver/common.rb +44 -0
  29. data/lib/selenium/webdriver/common/action_builder.rb +352 -0
  30. data/lib/selenium/webdriver/common/alert.rb +30 -0
  31. data/lib/selenium/webdriver/common/bridge_helper.rb +67 -0
  32. data/lib/selenium/webdriver/common/core_ext/base64.rb +9 -0
  33. data/lib/selenium/webdriver/common/core_ext/dir.rb +42 -0
  34. data/lib/selenium/webdriver/common/core_ext/string.rb +5 -0
  35. data/lib/selenium/webdriver/common/driver.rb +301 -0
  36. data/lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb +17 -0
  37. data/lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb +39 -0
  38. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +25 -0
  39. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +13 -0
  40. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +22 -0
  41. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +19 -0
  42. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +22 -0
  43. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +45 -0
  44. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +43 -0
  45. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +46 -0
  46. data/lib/selenium/webdriver/common/element.rb +293 -0
  47. data/lib/selenium/webdriver/common/error.rb +207 -0
  48. data/lib/selenium/webdriver/common/file_reaper.rb +47 -0
  49. data/lib/selenium/webdriver/common/html5/local_storage.rb +42 -0
  50. data/lib/selenium/webdriver/common/html5/location.rb +0 -0
  51. data/lib/selenium/webdriver/common/html5/session_storage.rb +44 -0
  52. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +42 -0
  53. data/lib/selenium/webdriver/common/json_helper.rb +34 -0
  54. data/lib/selenium/webdriver/common/keyboard.rb +55 -0
  55. data/lib/selenium/webdriver/common/keys.rb +109 -0
  56. data/lib/selenium/webdriver/common/log_entry.rb +29 -0
  57. data/lib/selenium/webdriver/common/logs.rb +23 -0
  58. data/lib/selenium/webdriver/common/mouse.rb +72 -0
  59. data/lib/selenium/webdriver/common/navigation.rb +43 -0
  60. data/lib/selenium/webdriver/common/options.rb +136 -0
  61. data/lib/selenium/webdriver/common/platform.rb +218 -0
  62. data/lib/selenium/webdriver/common/port_prober.rb +42 -0
  63. data/lib/selenium/webdriver/common/profile_helper.rb +67 -0
  64. data/lib/selenium/webdriver/common/proxy.rb +149 -0
  65. data/lib/selenium/webdriver/common/search_context.rb +92 -0
  66. data/lib/selenium/webdriver/common/socket_poller.rb +105 -0
  67. data/lib/selenium/webdriver/common/target_locator.rb +81 -0
  68. data/lib/selenium/webdriver/common/timeouts.rb +38 -0
  69. data/lib/selenium/webdriver/common/touch_action_builder.rb +64 -0
  70. data/lib/selenium/webdriver/common/touch_screen.rb +105 -0
  71. data/lib/selenium/webdriver/common/wait.rb +63 -0
  72. data/lib/selenium/webdriver/common/window.rb +104 -0
  73. data/lib/selenium/webdriver/common/zipper.rb +82 -0
  74. data/lib/selenium/webdriver/firefox.rb +37 -0
  75. data/lib/selenium/webdriver/firefox/binary.rb +158 -0
  76. data/lib/selenium/webdriver/firefox/bridge.rb +70 -0
  77. data/lib/selenium/webdriver/firefox/extension.rb +52 -0
  78. data/lib/selenium/webdriver/firefox/launcher.rb +106 -0
  79. data/lib/selenium/webdriver/firefox/profile.rb +263 -0
  80. data/lib/selenium/webdriver/firefox/profiles_ini.rb +62 -0
  81. data/lib/selenium/webdriver/firefox/socket_lock.rb +61 -0
  82. data/lib/selenium/webdriver/firefox/util.rb +29 -0
  83. data/lib/selenium/webdriver/ie.rb +19 -0
  84. data/lib/selenium/webdriver/ie/bridge.rb +68 -0
  85. data/lib/selenium/webdriver/ie/server.rb +86 -0
  86. data/lib/selenium/webdriver/iphone.rb +9 -0
  87. data/lib/selenium/webdriver/iphone/bridge.rb +45 -0
  88. data/lib/selenium/webdriver/opera.rb +24 -0
  89. data/lib/selenium/webdriver/opera/bridge.rb +112 -0
  90. data/lib/selenium/webdriver/opera/service.rb +49 -0
  91. data/lib/selenium/webdriver/phantomjs.rb +22 -0
  92. data/lib/selenium/webdriver/phantomjs/bridge.rb +59 -0
  93. data/lib/selenium/webdriver/phantomjs/service.rb +90 -0
  94. data/lib/selenium/webdriver/remote.rb +22 -0
  95. data/lib/selenium/webdriver/remote/bridge.rb +644 -0
  96. data/lib/selenium/webdriver/remote/capabilities.rb +267 -0
  97. data/lib/selenium/webdriver/remote/commands.rb +193 -0
  98. data/lib/selenium/webdriver/remote/http/common.rb +74 -0
  99. data/lib/selenium/webdriver/remote/http/curb.rb +79 -0
  100. data/lib/selenium/webdriver/remote/http/default.rb +139 -0
  101. data/lib/selenium/webdriver/remote/http/persistent.rb +38 -0
  102. data/lib/selenium/webdriver/remote/response.rb +97 -0
  103. data/lib/selenium/webdriver/remote/server_error.rb +17 -0
  104. data/lib/selenium/webdriver/safari.rb +46 -0
  105. data/lib/selenium/webdriver/safari/bridge.rb +110 -0
  106. data/lib/selenium/webdriver/safari/browser.rb +20 -0
  107. data/lib/selenium/webdriver/safari/extension.rb +120 -0
  108. data/lib/selenium/webdriver/safari/server.rb +145 -0
  109. data/lib/selenium/webdriver/support.rb +5 -0
  110. data/lib/selenium/webdriver/support/abstract_event_listener.rb +28 -0
  111. data/lib/selenium/webdriver/support/block_event_listener.rb +17 -0
  112. data/lib/selenium/webdriver/support/color.rb +110 -0
  113. data/lib/selenium/webdriver/support/event_firing_bridge.rb +112 -0
  114. data/lib/selenium/webdriver/support/select.rb +293 -0
  115. data/ruby.iml +13 -0
  116. data/spec/integration/selenium/client/api/backward_compatible_api_spec.rb +22 -0
  117. data/spec/integration/selenium/client/api/browser_xpath_library_spec.rb +17 -0
  118. data/spec/integration/selenium/client/api/click_spec.rb +39 -0
  119. data/spec/integration/selenium/client/api/cookie_spec.rb +39 -0
  120. data/spec/integration/selenium/client/api/element_spec.rb +14 -0
  121. data/spec/integration/selenium/client/api/highlight_located_element_spec.rb +19 -0
  122. data/spec/integration/selenium/client/api/retrieve_last_remote_control_logs_spec.rb +33 -0
  123. data/spec/integration/selenium/client/api/screenshot_spec.rb +31 -0
  124. data/spec/integration/selenium/client/api/select_window_spec.rb +46 -0
  125. data/spec/integration/selenium/client/api/start_stop_spec.rb +9 -0
  126. data/spec/integration/selenium/client/api/wait_for_ajax_spec.rb +27 -0
  127. data/spec/integration/selenium/client/api/wait_for_element_spec.rb +56 -0
  128. data/spec/integration/selenium/client/api/wait_for_field_value_spec.rb +52 -0
  129. data/spec/integration/selenium/client/api/wait_for_text_spec.rb +98 -0
  130. data/spec/integration/selenium/client/api/webdriver_backed_spec.rb +21 -0
  131. data/spec/integration/selenium/client/sample-app/public/jquery-1.3.2.js +4376 -0
  132. data/spec/integration/selenium/client/sample-app/public/jquery.html +55 -0
  133. data/spec/integration/selenium/client/sample-app/public/prototype-1.6.0.3.js +4320 -0
  134. data/spec/integration/selenium/client/sample-app/public/prototype.html +59 -0
  135. data/spec/integration/selenium/client/sample-app/sample_app.rb +32 -0
  136. data/spec/integration/selenium/client/spec_helper.rb +139 -0
  137. data/spec/integration/selenium/webdriver/app_cache_spec.rb +47 -0
  138. data/spec/integration/selenium/webdriver/browser_connection_spec.rb +20 -0
  139. data/spec/integration/selenium/webdriver/chrome/driver_spec.rb +28 -0
  140. data/spec/integration/selenium/webdriver/chrome/profile_spec.rb +63 -0
  141. data/spec/integration/selenium/webdriver/driver_spec.rb +266 -0
  142. data/spec/integration/selenium/webdriver/element_spec.rb +191 -0
  143. data/spec/integration/selenium/webdriver/error_spec.rb +30 -0
  144. data/spec/integration/selenium/webdriver/firefox/driver_spec.rb +21 -0
  145. data/spec/integration/selenium/webdriver/firefox/profile_spec.rb +141 -0
  146. data/spec/integration/selenium/webdriver/keyboard_spec.rb +57 -0
  147. data/spec/integration/selenium/webdriver/location_spec.rb +29 -0
  148. data/spec/integration/selenium/webdriver/mouse_spec.rb +57 -0
  149. data/spec/integration/selenium/webdriver/navigation_spec.rb +46 -0
  150. data/spec/integration/selenium/webdriver/opera/driver_spec.rb +47 -0
  151. data/spec/integration/selenium/webdriver/options_spec.rb +77 -0
  152. data/spec/integration/selenium/webdriver/remote/driver_spec.rb +19 -0
  153. data/spec/integration/selenium/webdriver/remote/element_spec.rb +26 -0
  154. data/spec/integration/selenium/webdriver/spec_helper.rb +36 -0
  155. data/spec/integration/selenium/webdriver/spec_support.rb +12 -0
  156. data/spec/integration/selenium/webdriver/spec_support/guards.rb +110 -0
  157. data/spec/integration/selenium/webdriver/spec_support/helpers.rb +51 -0
  158. data/spec/integration/selenium/webdriver/spec_support/rack_server.rb +123 -0
  159. data/spec/integration/selenium/webdriver/spec_support/test_environment.rb +239 -0
  160. data/spec/integration/selenium/webdriver/sql_database_spec.rb +59 -0
  161. data/spec/integration/selenium/webdriver/storage_spec.rb +96 -0
  162. data/spec/integration/selenium/webdriver/target_locator_spec.rb +186 -0
  163. data/spec/integration/selenium/webdriver/timeout_spec.rb +69 -0
  164. data/spec/integration/selenium/webdriver/touch_spec.rb +176 -0
  165. data/spec/integration/selenium/webdriver/window_spec.rb +70 -0
  166. data/spec/integration/selenium/webdriver/zipper_spec.rb +66 -0
  167. data/spec/unit/selenium/client/base_spec.rb +239 -0
  168. data/spec/unit/selenium/client/extensions_spec.rb +174 -0
  169. data/spec/unit/selenium/client/idiomatic_spec.rb +500 -0
  170. data/spec/unit/selenium/client/javascript_expression_builder_spec.rb +79 -0
  171. data/spec/unit/selenium/client/javascript_frameworks/jquery_spec.rb +10 -0
  172. data/spec/unit/selenium/client/javascript_frameworks/prototype_spec.rb +10 -0
  173. data/spec/unit/selenium/client/protocol_spec.rb +124 -0
  174. data/spec/unit/selenium/client/selenium_helper_spec.rb +56 -0
  175. data/spec/unit/selenium/client/spec_helper.rb +24 -0
  176. data/spec/unit/selenium/rake/task_spec.rb +79 -0
  177. data/spec/unit/selenium/server_spec.rb +150 -0
  178. data/spec/unit/selenium/webdriver/action_builder_spec.rb +97 -0
  179. data/spec/unit/selenium/webdriver/android/bridge_spec.rb +43 -0
  180. data/spec/unit/selenium/webdriver/chrome/bridge_spec.rb +137 -0
  181. data/spec/unit/selenium/webdriver/chrome/profile_spec.rb +57 -0
  182. data/spec/unit/selenium/webdriver/chrome/service_spec.rb +44 -0
  183. data/spec/unit/selenium/webdriver/error_spec.rb +41 -0
  184. data/spec/unit/selenium/webdriver/firefox/bridge_spec.rb +47 -0
  185. data/spec/unit/selenium/webdriver/ie/bridge_spec.rb +91 -0
  186. data/spec/unit/selenium/webdriver/iphone/bridge_spec.rb +42 -0
  187. data/spec/unit/selenium/webdriver/log_entry_spec.rb +11 -0
  188. data/spec/unit/selenium/webdriver/opera/bridge_spec.rb +44 -0
  189. data/spec/unit/selenium/webdriver/phantomjs/bridge_spec.rb +55 -0
  190. data/spec/unit/selenium/webdriver/proxy_spec.rb +106 -0
  191. data/spec/unit/selenium/webdriver/remote/bridge_spec.rb +16 -0
  192. data/spec/unit/selenium/webdriver/remote/capabilities_spec.rb +115 -0
  193. data/spec/unit/selenium/webdriver/remote/http/common_spec.rb +24 -0
  194. data/spec/unit/selenium/webdriver/remote/http/default_spec.rb +124 -0
  195. data/spec/unit/selenium/webdriver/search_context_spec.rb +61 -0
  196. data/spec/unit/selenium/webdriver/socket_poller_spec.rb +68 -0
  197. data/spec/unit/selenium/webdriver/spec_helper.rb +27 -0
  198. data/spec/unit/selenium/webdriver/support/color_spec.rb +119 -0
  199. data/spec/unit/selenium/webdriver/support/event_firing_spec.rb +111 -0
  200. data/spec/unit/selenium/webdriver/support/select_spec.rb +290 -0
  201. data/spec/unit/selenium/webdriver/wait_spec.rb +49 -0
  202. metadata +370 -0
@@ -0,0 +1,186 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe "Selenium::WebDriver::TargetLocator" do
4
+ let(:wait) { Selenium::WebDriver::Wait.new }
5
+
6
+ it "should find the active element" do
7
+ driver.navigate.to url_for("xhtmlTest.html")
8
+ driver.switch_to.active_element.should be_an_instance_of(WebDriver::Element)
9
+ end
10
+
11
+ not_compliant_on :browser => [:iphone] do
12
+ it "should switch to a frame" do
13
+ driver.navigate.to url_for("iframes.html")
14
+ driver.switch_to.frame("iframe1")
15
+
16
+ driver.find_element(:name, 'login').should be_kind_of(WebDriver::Element)
17
+ end
18
+
19
+ it "should switch to a frame by Element" do
20
+ driver.navigate.to url_for("iframes.html")
21
+
22
+ iframe = driver.find_element(:tag_name => "iframe")
23
+ driver.switch_to.frame(iframe)
24
+
25
+ driver.find_element(:name, 'login').should be_kind_of(WebDriver::Element)
26
+ end
27
+ end
28
+
29
+ # switching by name not yet supported by safari
30
+ not_compliant_on :browser => [:ie, :iphone, :safari] do
31
+ it "should switch to a window and back when given a block" do
32
+ driver.navigate.to url_for("xhtmlTest.html")
33
+
34
+ driver.find_element(:link, "Open new window").click
35
+ driver.title.should == "XHTML Test Page"
36
+
37
+ driver.switch_to.window("result") do
38
+ wait.until { driver.title == "We Arrive Here" }
39
+ end
40
+
41
+ wait.until { driver.title == "XHTML Test Page" }
42
+
43
+ reset_driver!
44
+ end
45
+
46
+ it "should handle exceptions inside the block" do
47
+ driver.navigate.to url_for("xhtmlTest.html")
48
+
49
+ driver.find_element(:link, "Open new window").click
50
+ driver.title.should == "XHTML Test Page"
51
+
52
+ lambda {
53
+ driver.switch_to.window("result") { raise "foo" }
54
+ }.should raise_error(RuntimeError, "foo")
55
+
56
+ driver.title.should == "XHTML Test Page"
57
+
58
+ reset_driver!
59
+ end
60
+
61
+ it "should switch to a window" do
62
+ driver.navigate.to url_for("xhtmlTest.html")
63
+
64
+ driver.find_element(:link, "Open new window").click
65
+ wait.until { driver.title == "XHTML Test Page" }
66
+
67
+ driver.switch_to.window("result")
68
+ wait.until { driver.title == "We Arrive Here" }
69
+
70
+ reset_driver!
71
+ end
72
+
73
+ it "should use the original window if the block closes the popup" do
74
+ driver.navigate.to url_for("xhtmlTest.html")
75
+
76
+ driver.find_element(:link, "Open new window").click
77
+ driver.title.should == "XHTML Test Page"
78
+
79
+ driver.switch_to.window("result") do
80
+ wait.until { driver.title == "We Arrive Here" }
81
+ driver.close
82
+ end
83
+
84
+ driver.current_url.should include("xhtmlTest.html")
85
+ driver.title.should == "XHTML Test Page"
86
+ reset_driver!
87
+ end
88
+ end
89
+
90
+ not_compliant_on :browser => [:android, :iphone, :safari] do
91
+ it "should switch to default content" do
92
+ driver.navigate.to url_for("iframes.html")
93
+
94
+ driver.switch_to.frame 0
95
+ driver.switch_to.default_content
96
+
97
+ driver.find_element(:id => "iframe_page_heading")
98
+ end
99
+ end
100
+
101
+ describe "alerts" do
102
+ not_compliant_on :browser => [:opera, :iphone, :safari, :phantomjs] do
103
+ it "allows the user to accept an alert" do
104
+ driver.navigate.to url_for("alerts.html")
105
+ driver.find_element(:id => "alert").click
106
+
107
+ driver.switch_to.alert.accept
108
+
109
+ driver.title.should == "Testing Alerts"
110
+ end
111
+ end
112
+
113
+ not_compliant_on({:browser => :chrome, :platform => :macosx}, # http://code.google.com/p/chromedriver/issues/detail?id=26
114
+ {:browser => :opera},
115
+ {:browser => :iphone},
116
+ {:browser => :safari},
117
+ {:browser => :phantomjs}) do
118
+ it "allows the user to dismiss an alert" do
119
+ driver.navigate.to url_for("alerts.html")
120
+ driver.find_element(:id => "alert").click
121
+
122
+ alert = wait_for_alert
123
+ alert.dismiss
124
+
125
+ driver.title.should == "Testing Alerts"
126
+ end
127
+ end
128
+
129
+ not_compliant_on :browser => [:opera, :iphone, :safari, :phantomjs] do
130
+ it "allows the user to set the value of a prompt" do
131
+ driver.navigate.to url_for("alerts.html")
132
+ driver.find_element(:id => "prompt").click
133
+
134
+ alert = wait_for_alert
135
+ alert.send_keys "cheese"
136
+ alert.accept
137
+
138
+ text = driver.find_element(:id => "text").text
139
+ text.should == "cheese"
140
+ end
141
+
142
+ it "allows the user to get the text of an alert" do
143
+ driver.navigate.to url_for("alerts.html")
144
+ driver.find_element(:id => "alert").click
145
+
146
+ alert = wait_for_alert
147
+ text = alert.text
148
+ alert.accept
149
+
150
+ text.should == "cheese"
151
+ end
152
+
153
+ it "raises when calling #text on a closed alert" do
154
+ driver.navigate.to url_for("alerts.html")
155
+ driver.find_element(:id => "alert").click
156
+
157
+ alert = wait_for_alert
158
+ alert.accept
159
+
160
+ expect { alert.text }.to raise_error(Selenium::WebDriver::Error::NoAlertPresentError)
161
+ end
162
+
163
+ end
164
+
165
+ not_compliant_on :browser => [:ie, :opera, :iphone, :safari, :phantomjs] do
166
+ it "raises NoAlertOpenError if no alert is present" do
167
+ lambda { driver.switch_to.alert }.should raise_error(
168
+ Selenium::WebDriver::Error::NoAlertPresentError, /alert|modal dialog/i)
169
+ end
170
+ end
171
+
172
+ compliant_on :browser => [:firefox, :ie] do
173
+ it "raises an UnhandledAlertError if an alert has not been dealt with" do
174
+ driver.navigate.to url_for("alerts.html")
175
+ driver.find_element(:id => "alert").click
176
+ wait_for_alert
177
+
178
+ lambda { driver.title }.should raise_error(Selenium::WebDriver::Error::UnhandledAlertError)
179
+
180
+ driver.title.should == "Testing Alerts" # :chrome does not auto-dismiss the alert
181
+ end
182
+ end
183
+
184
+ end
185
+ end
186
+
@@ -0,0 +1,69 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe "Timeouts" do
4
+
5
+ context "implicit waits" do
6
+ before do
7
+ driver.manage.timeouts.implicit_wait = 0
8
+ driver.navigate.to url_for("dynamic.html")
9
+ end
10
+
11
+ after { driver.manage.timeouts.implicit_wait = 0 }
12
+
13
+ it "should implicitly wait for a single element" do
14
+ driver.manage.timeouts.implicit_wait = 6
15
+
16
+ driver.find_element(:id => 'adder').click
17
+ driver.find_element(:id => 'box0')
18
+ end
19
+
20
+ it "should still fail to find an element with implicit waits enabled" do
21
+ driver.manage.timeouts.implicit_wait = 0.5
22
+ lambda { driver.find_element(:id => "box0") }.should raise_error(WebDriver::Error::NoSuchElementError)
23
+ end
24
+
25
+ it "should return after first attempt to find one after disabling implicit waits" do
26
+ driver.manage.timeouts.implicit_wait = 3
27
+ driver.manage.timeouts.implicit_wait = 0
28
+
29
+ lambda { driver.find_element(:id => "box0") }.should raise_error(WebDriver::Error::NoSuchElementError)
30
+ end
31
+
32
+ it "should implicitly wait until at least one element is found when searching for many" do
33
+ add = driver.find_element(:id => "adder")
34
+
35
+ driver.manage.timeouts.implicit_wait = 6
36
+ add.click
37
+ add.click
38
+
39
+ driver.find_elements(:class_name => "redbox").should_not be_empty
40
+ end
41
+
42
+ it "should still fail to find elements when implicit waits are enabled" do
43
+ driver.manage.timeouts.implicit_wait = 0.5
44
+ driver.find_elements(:class_name => "redbox").should be_empty
45
+ end
46
+
47
+ it "should return after first attempt to find many after disabling implicit waits" do
48
+ add = driver.find_element(:id => "adder")
49
+
50
+ driver.manage.timeouts.implicit_wait = 3
51
+ driver.manage.timeouts.implicit_wait = 0
52
+ add.click
53
+
54
+ driver.find_elements(:class_name => "redbox").should be_empty
55
+ end
56
+ end
57
+
58
+ context "page loads" do
59
+ after { driver.manage.timeouts.page_load = -1 }
60
+
61
+ compliant_on :browser => :firefox do
62
+ it "should be able to set the page load timeout" do
63
+ driver.manage.timeouts.page_load = 2
64
+ # TODO: actually test something
65
+ end
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,176 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ module Selenium::WebDriver::DriverExtensions
4
+ describe HasTouchScreen do
5
+ compliant_on :browser => :android do
6
+ context "flick" do
7
+ before {
8
+ reset_driver!
9
+ driver.get url_for("longContentPage.html")
10
+ driver.rotation = :portrait
11
+ }
12
+
13
+ it "can flick horizontally from element" do
14
+ link = driver.find_element(:id => "link1")
15
+ link.location.x.should > 1500
16
+
17
+ to_flick = driver.find_element(:id => "imagestart")
18
+ driver.touch.flick(to_flick, -1000, 0, :normal).perform
19
+
20
+ link.location.x.should < 1500
21
+ end
22
+
23
+ it "can flick horizontally fast from element" do
24
+ link = driver.find_element(:id => "link2")
25
+ link.location.x.should > 3500
26
+
27
+ to_flick = driver.find_element(:id => "imagestart")
28
+ driver.touch.flick(to_flick, -400, 0, :fast).perform
29
+
30
+ link.location.x.should < 3500
31
+ end
32
+
33
+ not_compliant_on :browser => :android do
34
+ it "can flick horizontally" do
35
+ link = driver.find_element(:id => "link1")
36
+ link.location.x.should > 1500
37
+
38
+ driver.touch.flick(1000, 0).perform
39
+
40
+ link.location.x.should < 1500
41
+ end
42
+ end
43
+
44
+ not_compliant_on :browser => :android do
45
+ # no compliant driver currently, see TouchFlickTest.java
46
+ it "can flick horizontally fast"
47
+ end
48
+
49
+ it "can flick vertically from element" do
50
+ link = driver.find_element(:id => "link3")
51
+ link.location.y.should > 4200
52
+
53
+ to_flick = driver.find_element(:id => "imagestart")
54
+ driver.touch.flick(to_flick, 0, -600, :normal).perform
55
+
56
+ link.location.y.should < 4000
57
+ end
58
+
59
+ it "can flick vertically fast from element" do
60
+ link = driver.find_element(:id => "link4")
61
+ link.location.y.should > 8700
62
+
63
+ to_flick = driver.find_element(:id => "imagestart")
64
+ driver.touch.flick(to_flick, 0, -600, :fast).perform
65
+
66
+ link.location.y.should < 8700
67
+ end
68
+
69
+ it "can flick vertically" do
70
+ link = driver.find_element(:id => "link3")
71
+ link.location.y.should > 4200
72
+
73
+ to_flick = driver.find_element(:id => "imagestart")
74
+ driver.touch.flick(0, 750).perform
75
+
76
+ link.location.y.should < 4200
77
+ end
78
+
79
+ it "can flick vertically fast" do
80
+ link = driver.find_element(:id => "link4")
81
+ link.location.y.should > 8700
82
+
83
+ driver.touch.flick(0, 1500).perform
84
+
85
+ link.location.y.should < 4000
86
+ end
87
+ end
88
+
89
+ context "scroll" do
90
+ before {
91
+ reset_driver!
92
+ driver.get url_for("longContentPage.html")
93
+ }
94
+
95
+ compliant_on :browser => nil do
96
+ it "can scroll vertically from element" do
97
+ link = driver.find_element(:id => "link3")
98
+ link.location.y > 4200
99
+
100
+ to_scroll = driver.find_element(:id => "imagestart")
101
+ driver.touch.scroll(to_scroll, 0, -800).perform
102
+
103
+ link.location.y.should < 3500
104
+ end
105
+ end
106
+
107
+ it "can scroll vertically" do
108
+ link = driver.find_element(:id => "link3")
109
+ link.location.y > 4200
110
+
111
+ driver.touch.scroll(0, 800).perform
112
+
113
+ link.location.y.should < 3500
114
+ end
115
+
116
+ it "can scroll horizontally from element" do
117
+ link = driver.find_element(:id => "link1")
118
+ link.location.x.should > 1500
119
+
120
+ to_scroll = driver.find_element(:id => "imagestart")
121
+ driver.touch.scroll(to_scroll, -1000, 0).perform
122
+
123
+ link.location.x < 1500
124
+ end
125
+
126
+ it "can scroll horizontally" do
127
+ link = driver.find_element(:id => "link1")
128
+ link.location.x.should > 1500
129
+
130
+ driver.touch.scroll(400, 0).perform
131
+
132
+ link.location.x < 1500
133
+ end
134
+ end
135
+
136
+ context "single tap" do
137
+ before { driver.get url_for("clicks.html") }
138
+
139
+ it "can single tap on a link and follow it" do
140
+ e = driver.find_element(:id => "normal")
141
+
142
+ driver.touch.single_tap(e).perform
143
+ wait.until { driver.title == "XHTML Test Page" }
144
+ end
145
+
146
+ it "can single tap on an anchor and not reload" do
147
+ driver.execute_script "document.latch = true"
148
+
149
+ e = driver.find_element(:id => "anchor")
150
+ driver.touch.single_tap(e).perform
151
+
152
+ same_page = driver.execute_script "return document.latch"
153
+ same_page.should be_true
154
+ end
155
+ end
156
+
157
+ context "double tap" do
158
+ before { driver.get url_for("longContentPage.html") }
159
+
160
+ it "can double tap an element" do
161
+ image = driver.find_element(:id => "imagestart")
162
+ image.location.y.should > 100
163
+
164
+ driver.touch.double_tap(image).perform
165
+ image.location.y.should < 50
166
+ end
167
+ end
168
+
169
+ context "long press" do
170
+ it "can long press on an element"
171
+ end
172
+
173
+ end
174
+ end
175
+ end
176
+
@@ -0,0 +1,70 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ describe Window do
6
+ let(:window) { driver.manage.window }
7
+
8
+ compliant_on :browser => [:firefox, :chrome] do
9
+ it "gets the size of the current window" do
10
+ size = window.size
11
+
12
+ size.should be_kind_of(Dimension)
13
+
14
+ size.width.should > 0
15
+ size.height.should > 0
16
+ end
17
+
18
+ it "sets the size of the current window" do
19
+ size = window.size
20
+
21
+ target_width = size.width - 20
22
+ target_height = size.height - 20
23
+
24
+ window.size = Dimension.new(target_width, target_height)
25
+
26
+ new_size = window.size
27
+ new_size.width.should == target_width
28
+ new_size.height.should == target_height
29
+ end
30
+
31
+ it "gets the position of the current window" do
32
+ pos = driver.manage.window.position
33
+
34
+ pos.should be_kind_of(Point)
35
+
36
+ pos.x.should >= 0
37
+ pos.y.should >= 0
38
+ end
39
+
40
+ it "sets the position of the current window" do
41
+ pos = window.position
42
+
43
+ target_x = pos.x + 10
44
+ target_y = pos.y + 10
45
+
46
+ window.position = Point.new(target_x, target_y)
47
+
48
+ new_pos = window.position
49
+ new_pos.x.should == target_x
50
+ new_pos.y.should == target_y
51
+ end
52
+ end
53
+
54
+ compliant_on({:browser => :ie},
55
+ {:browser => :firefox, :platform => [:windows, :macosx]},
56
+ {:browser => :firefox, :platform => :linux, :window_manager => true}) do
57
+ it "can maximize the current window" do
58
+ window.size = old_size = Dimension.new(200, 200)
59
+
60
+ window.maximize
61
+
62
+ new_size = window.size
63
+ new_size.width.should > old_size.width
64
+ new_size.height.should > old_size.height
65
+ end
66
+ end
67
+
68
+ end
69
+ end
70
+ end