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.
- checksums.yaml +7 -0
- data/CHANGES +791 -0
- data/README.md +31 -0
- data/build.desc +334 -0
- data/lib/selenium-client.rb +2 -0
- data/lib/selenium-webdriver.rb +1 -0
- data/lib/selenium/client.rb +37 -0
- data/lib/selenium/client/base.rb +132 -0
- data/lib/selenium/client/driver.rb +10 -0
- data/lib/selenium/client/errors.rb +9 -0
- data/lib/selenium/client/extensions.rb +118 -0
- data/lib/selenium/client/idiomatic.rb +488 -0
- data/lib/selenium/client/javascript_expression_builder.rb +116 -0
- data/lib/selenium/client/javascript_frameworks/jquery.rb +13 -0
- data/lib/selenium/client/javascript_frameworks/prototype.rb +13 -0
- data/lib/selenium/client/legacy_driver.rb +1720 -0
- data/lib/selenium/client/protocol.rb +104 -0
- data/lib/selenium/client/selenium_helper.rb +34 -0
- data/lib/selenium/rake/server_task.rb +157 -0
- data/lib/selenium/server.rb +248 -0
- data/lib/selenium/webdriver.rb +71 -0
- data/lib/selenium/webdriver/android.rb +9 -0
- data/lib/selenium/webdriver/android/bridge.rb +47 -0
- data/lib/selenium/webdriver/chrome.rb +26 -0
- data/lib/selenium/webdriver/chrome/bridge.rb +120 -0
- data/lib/selenium/webdriver/chrome/profile.rb +90 -0
- data/lib/selenium/webdriver/chrome/service.rb +75 -0
- data/lib/selenium/webdriver/common.rb +44 -0
- data/lib/selenium/webdriver/common/action_builder.rb +352 -0
- data/lib/selenium/webdriver/common/alert.rb +30 -0
- data/lib/selenium/webdriver/common/bridge_helper.rb +67 -0
- data/lib/selenium/webdriver/common/core_ext/base64.rb +9 -0
- data/lib/selenium/webdriver/common/core_ext/dir.rb +42 -0
- data/lib/selenium/webdriver/common/core_ext/string.rb +5 -0
- data/lib/selenium/webdriver/common/driver.rb +301 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb +17 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb +39 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +25 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +13 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +22 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +19 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +22 -0
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +45 -0
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +43 -0
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +46 -0
- data/lib/selenium/webdriver/common/element.rb +293 -0
- data/lib/selenium/webdriver/common/error.rb +207 -0
- data/lib/selenium/webdriver/common/file_reaper.rb +47 -0
- data/lib/selenium/webdriver/common/html5/local_storage.rb +42 -0
- data/lib/selenium/webdriver/common/html5/location.rb +0 -0
- data/lib/selenium/webdriver/common/html5/session_storage.rb +44 -0
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +42 -0
- data/lib/selenium/webdriver/common/json_helper.rb +34 -0
- data/lib/selenium/webdriver/common/keyboard.rb +55 -0
- data/lib/selenium/webdriver/common/keys.rb +109 -0
- data/lib/selenium/webdriver/common/log_entry.rb +29 -0
- data/lib/selenium/webdriver/common/logs.rb +23 -0
- data/lib/selenium/webdriver/common/mouse.rb +72 -0
- data/lib/selenium/webdriver/common/navigation.rb +43 -0
- data/lib/selenium/webdriver/common/options.rb +136 -0
- data/lib/selenium/webdriver/common/platform.rb +218 -0
- data/lib/selenium/webdriver/common/port_prober.rb +42 -0
- data/lib/selenium/webdriver/common/profile_helper.rb +67 -0
- data/lib/selenium/webdriver/common/proxy.rb +149 -0
- data/lib/selenium/webdriver/common/search_context.rb +92 -0
- data/lib/selenium/webdriver/common/socket_poller.rb +105 -0
- data/lib/selenium/webdriver/common/target_locator.rb +81 -0
- data/lib/selenium/webdriver/common/timeouts.rb +38 -0
- data/lib/selenium/webdriver/common/touch_action_builder.rb +64 -0
- data/lib/selenium/webdriver/common/touch_screen.rb +105 -0
- data/lib/selenium/webdriver/common/wait.rb +63 -0
- data/lib/selenium/webdriver/common/window.rb +104 -0
- data/lib/selenium/webdriver/common/zipper.rb +82 -0
- data/lib/selenium/webdriver/firefox.rb +37 -0
- data/lib/selenium/webdriver/firefox/binary.rb +158 -0
- data/lib/selenium/webdriver/firefox/bridge.rb +70 -0
- data/lib/selenium/webdriver/firefox/extension.rb +52 -0
- data/lib/selenium/webdriver/firefox/launcher.rb +106 -0
- data/lib/selenium/webdriver/firefox/profile.rb +263 -0
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +62 -0
- data/lib/selenium/webdriver/firefox/socket_lock.rb +61 -0
- data/lib/selenium/webdriver/firefox/util.rb +29 -0
- data/lib/selenium/webdriver/ie.rb +19 -0
- data/lib/selenium/webdriver/ie/bridge.rb +68 -0
- data/lib/selenium/webdriver/ie/server.rb +86 -0
- data/lib/selenium/webdriver/iphone.rb +9 -0
- data/lib/selenium/webdriver/iphone/bridge.rb +45 -0
- data/lib/selenium/webdriver/opera.rb +24 -0
- data/lib/selenium/webdriver/opera/bridge.rb +112 -0
- data/lib/selenium/webdriver/opera/service.rb +49 -0
- data/lib/selenium/webdriver/phantomjs.rb +22 -0
- data/lib/selenium/webdriver/phantomjs/bridge.rb +59 -0
- data/lib/selenium/webdriver/phantomjs/service.rb +90 -0
- data/lib/selenium/webdriver/remote.rb +22 -0
- data/lib/selenium/webdriver/remote/bridge.rb +644 -0
- data/lib/selenium/webdriver/remote/capabilities.rb +267 -0
- data/lib/selenium/webdriver/remote/commands.rb +193 -0
- data/lib/selenium/webdriver/remote/http/common.rb +74 -0
- data/lib/selenium/webdriver/remote/http/curb.rb +79 -0
- data/lib/selenium/webdriver/remote/http/default.rb +139 -0
- data/lib/selenium/webdriver/remote/http/persistent.rb +38 -0
- data/lib/selenium/webdriver/remote/response.rb +97 -0
- data/lib/selenium/webdriver/remote/server_error.rb +17 -0
- data/lib/selenium/webdriver/safari.rb +46 -0
- data/lib/selenium/webdriver/safari/bridge.rb +110 -0
- data/lib/selenium/webdriver/safari/browser.rb +20 -0
- data/lib/selenium/webdriver/safari/extension.rb +120 -0
- data/lib/selenium/webdriver/safari/server.rb +145 -0
- data/lib/selenium/webdriver/support.rb +5 -0
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +28 -0
- data/lib/selenium/webdriver/support/block_event_listener.rb +17 -0
- data/lib/selenium/webdriver/support/color.rb +110 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +112 -0
- data/lib/selenium/webdriver/support/select.rb +293 -0
- data/ruby.iml +13 -0
- data/spec/integration/selenium/client/api/backward_compatible_api_spec.rb +22 -0
- data/spec/integration/selenium/client/api/browser_xpath_library_spec.rb +17 -0
- data/spec/integration/selenium/client/api/click_spec.rb +39 -0
- data/spec/integration/selenium/client/api/cookie_spec.rb +39 -0
- data/spec/integration/selenium/client/api/element_spec.rb +14 -0
- data/spec/integration/selenium/client/api/highlight_located_element_spec.rb +19 -0
- data/spec/integration/selenium/client/api/retrieve_last_remote_control_logs_spec.rb +33 -0
- data/spec/integration/selenium/client/api/screenshot_spec.rb +31 -0
- data/spec/integration/selenium/client/api/select_window_spec.rb +46 -0
- data/spec/integration/selenium/client/api/start_stop_spec.rb +9 -0
- data/spec/integration/selenium/client/api/wait_for_ajax_spec.rb +27 -0
- data/spec/integration/selenium/client/api/wait_for_element_spec.rb +56 -0
- data/spec/integration/selenium/client/api/wait_for_field_value_spec.rb +52 -0
- data/spec/integration/selenium/client/api/wait_for_text_spec.rb +98 -0
- data/spec/integration/selenium/client/api/webdriver_backed_spec.rb +21 -0
- data/spec/integration/selenium/client/sample-app/public/jquery-1.3.2.js +4376 -0
- data/spec/integration/selenium/client/sample-app/public/jquery.html +55 -0
- data/spec/integration/selenium/client/sample-app/public/prototype-1.6.0.3.js +4320 -0
- data/spec/integration/selenium/client/sample-app/public/prototype.html +59 -0
- data/spec/integration/selenium/client/sample-app/sample_app.rb +32 -0
- data/spec/integration/selenium/client/spec_helper.rb +139 -0
- data/spec/integration/selenium/webdriver/app_cache_spec.rb +47 -0
- data/spec/integration/selenium/webdriver/browser_connection_spec.rb +20 -0
- data/spec/integration/selenium/webdriver/chrome/driver_spec.rb +28 -0
- data/spec/integration/selenium/webdriver/chrome/profile_spec.rb +63 -0
- data/spec/integration/selenium/webdriver/driver_spec.rb +266 -0
- data/spec/integration/selenium/webdriver/element_spec.rb +191 -0
- data/spec/integration/selenium/webdriver/error_spec.rb +30 -0
- data/spec/integration/selenium/webdriver/firefox/driver_spec.rb +21 -0
- data/spec/integration/selenium/webdriver/firefox/profile_spec.rb +141 -0
- data/spec/integration/selenium/webdriver/keyboard_spec.rb +57 -0
- data/spec/integration/selenium/webdriver/location_spec.rb +29 -0
- data/spec/integration/selenium/webdriver/mouse_spec.rb +57 -0
- data/spec/integration/selenium/webdriver/navigation_spec.rb +46 -0
- data/spec/integration/selenium/webdriver/opera/driver_spec.rb +47 -0
- data/spec/integration/selenium/webdriver/options_spec.rb +77 -0
- data/spec/integration/selenium/webdriver/remote/driver_spec.rb +19 -0
- data/spec/integration/selenium/webdriver/remote/element_spec.rb +26 -0
- data/spec/integration/selenium/webdriver/spec_helper.rb +36 -0
- data/spec/integration/selenium/webdriver/spec_support.rb +12 -0
- data/spec/integration/selenium/webdriver/spec_support/guards.rb +110 -0
- data/spec/integration/selenium/webdriver/spec_support/helpers.rb +51 -0
- data/spec/integration/selenium/webdriver/spec_support/rack_server.rb +123 -0
- data/spec/integration/selenium/webdriver/spec_support/test_environment.rb +239 -0
- data/spec/integration/selenium/webdriver/sql_database_spec.rb +59 -0
- data/spec/integration/selenium/webdriver/storage_spec.rb +96 -0
- data/spec/integration/selenium/webdriver/target_locator_spec.rb +186 -0
- data/spec/integration/selenium/webdriver/timeout_spec.rb +69 -0
- data/spec/integration/selenium/webdriver/touch_spec.rb +176 -0
- data/spec/integration/selenium/webdriver/window_spec.rb +70 -0
- data/spec/integration/selenium/webdriver/zipper_spec.rb +66 -0
- data/spec/unit/selenium/client/base_spec.rb +239 -0
- data/spec/unit/selenium/client/extensions_spec.rb +174 -0
- data/spec/unit/selenium/client/idiomatic_spec.rb +500 -0
- data/spec/unit/selenium/client/javascript_expression_builder_spec.rb +79 -0
- data/spec/unit/selenium/client/javascript_frameworks/jquery_spec.rb +10 -0
- data/spec/unit/selenium/client/javascript_frameworks/prototype_spec.rb +10 -0
- data/spec/unit/selenium/client/protocol_spec.rb +124 -0
- data/spec/unit/selenium/client/selenium_helper_spec.rb +56 -0
- data/spec/unit/selenium/client/spec_helper.rb +24 -0
- data/spec/unit/selenium/rake/task_spec.rb +79 -0
- data/spec/unit/selenium/server_spec.rb +150 -0
- data/spec/unit/selenium/webdriver/action_builder_spec.rb +97 -0
- data/spec/unit/selenium/webdriver/android/bridge_spec.rb +43 -0
- data/spec/unit/selenium/webdriver/chrome/bridge_spec.rb +137 -0
- data/spec/unit/selenium/webdriver/chrome/profile_spec.rb +57 -0
- data/spec/unit/selenium/webdriver/chrome/service_spec.rb +44 -0
- data/spec/unit/selenium/webdriver/error_spec.rb +41 -0
- data/spec/unit/selenium/webdriver/firefox/bridge_spec.rb +47 -0
- data/spec/unit/selenium/webdriver/ie/bridge_spec.rb +91 -0
- data/spec/unit/selenium/webdriver/iphone/bridge_spec.rb +42 -0
- data/spec/unit/selenium/webdriver/log_entry_spec.rb +11 -0
- data/spec/unit/selenium/webdriver/opera/bridge_spec.rb +44 -0
- data/spec/unit/selenium/webdriver/phantomjs/bridge_spec.rb +55 -0
- data/spec/unit/selenium/webdriver/proxy_spec.rb +106 -0
- data/spec/unit/selenium/webdriver/remote/bridge_spec.rb +16 -0
- data/spec/unit/selenium/webdriver/remote/capabilities_spec.rb +115 -0
- data/spec/unit/selenium/webdriver/remote/http/common_spec.rb +24 -0
- data/spec/unit/selenium/webdriver/remote/http/default_spec.rb +124 -0
- data/spec/unit/selenium/webdriver/search_context_spec.rb +61 -0
- data/spec/unit/selenium/webdriver/socket_poller_spec.rb +68 -0
- data/spec/unit/selenium/webdriver/spec_helper.rb +27 -0
- data/spec/unit/selenium/webdriver/support/color_spec.rb +119 -0
- data/spec/unit/selenium/webdriver/support/event_firing_spec.rb +111 -0
- data/spec/unit/selenium/webdriver/support/select_spec.rb +290 -0
- data/spec/unit/selenium/webdriver/wait_spec.rb +49 -0
- 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
|