selenium-webdriver 0.0.28 → 0.0.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/CHANGES +25 -0
  2. data/lib/selenium/webdriver.rb +6 -29
  3. data/lib/selenium/webdriver/chrome.rb +4 -2
  4. data/lib/selenium/webdriver/chrome/extension.zip +0 -0
  5. data/lib/selenium/webdriver/chrome/launcher.rb +15 -16
  6. data/lib/selenium/webdriver/common.rb +18 -0
  7. data/lib/selenium/webdriver/{bridge_helper.rb → common/bridge_helper.rb} +0 -0
  8. data/lib/selenium/webdriver/{core_ext → common/core_ext}/dir.rb +0 -0
  9. data/lib/selenium/webdriver/{core_ext → common/core_ext}/string.rb +0 -0
  10. data/lib/selenium/webdriver/{driver.rb → common/driver.rb} +19 -7
  11. data/lib/selenium/webdriver/{driver_extensions → common/driver_extensions}/takes_screenshot.rb +2 -2
  12. data/lib/selenium/webdriver/{element.rb → common/element.rb} +30 -3
  13. data/lib/selenium/webdriver/{error.rb → common/error.rb} +0 -0
  14. data/lib/selenium/webdriver/{file_reaper.rb → common/file_reaper.rb} +0 -0
  15. data/lib/selenium/webdriver/{find.rb → common/find.rb} +9 -1
  16. data/lib/selenium/webdriver/{keys.rb → common/keys.rb} +0 -0
  17. data/lib/selenium/webdriver/{navigation.rb → common/navigation.rb} +3 -3
  18. data/lib/selenium/webdriver/{options.rb → common/options.rb} +47 -5
  19. data/lib/selenium/webdriver/{platform.rb → common/platform.rb} +10 -0
  20. data/lib/selenium/webdriver/common/socket_poller.rb +47 -0
  21. data/lib/selenium/webdriver/{target_locator.rb → common/target_locator.rb} +11 -8
  22. data/lib/selenium/webdriver/{timeouts.rb → common/timeouts.rb} +0 -0
  23. data/lib/selenium/webdriver/common/wait.rb +60 -0
  24. data/lib/selenium/webdriver/common/zipper.rb +54 -0
  25. data/lib/selenium/webdriver/firefox.rb +6 -3
  26. data/lib/selenium/webdriver/firefox/binary.rb +46 -43
  27. data/lib/selenium/webdriver/firefox/bridge.rb +2 -10
  28. data/lib/selenium/webdriver/firefox/extension.rb +51 -0
  29. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  30. data/lib/selenium/webdriver/firefox/launcher.rb +25 -69
  31. data/lib/selenium/webdriver/firefox/profile.rb +123 -89
  32. data/lib/selenium/webdriver/firefox/profiles_ini.rb +2 -1
  33. data/lib/selenium/webdriver/firefox/socket_lock.rb +77 -0
  34. data/lib/selenium/webdriver/ie/bridge.rb +25 -38
  35. data/lib/selenium/webdriver/ie/lib.rb +11 -1
  36. data/lib/selenium/webdriver/ie/native/win32/InternetExplorerDriver.dll +0 -0
  37. data/lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll +0 -0
  38. data/lib/selenium/webdriver/ie/util.rb +3 -17
  39. data/lib/selenium/webdriver/remote/bridge.rb +9 -1
  40. data/lib/selenium/webdriver/remote/capabilities.rb +53 -20
  41. data/lib/selenium/webdriver/remote/http/default.rb +2 -2
  42. metadata +52 -31
  43. data/lib/selenium/webdriver/child_process.rb +0 -243
  44. data/lib/selenium/webdriver/zip_helper.rb +0 -27
@@ -1,243 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
-
4
- #
5
- # Cross platform child process launcher
6
- #
7
- # @private
8
- #
9
-
10
- class ChildProcess
11
- attr_reader :pid
12
-
13
- def initialize(*args)
14
- @args = args
15
-
16
- if Platform.jruby?
17
- extend JRubyProcess
18
- elsif Platform.ironruby?
19
- extend IronRubyProcess
20
- elsif Platform.os == :windows
21
- extend WindowsProcess
22
- end
23
- end
24
-
25
- def ugly_death?
26
- code = exit_value
27
- code && code != 0
28
- end
29
-
30
- #
31
- # Returns the exit value of the process, or nil if it's still alive.
32
- #
33
-
34
- def exit_value
35
- pid, status = Process.waitpid2(@pid, Process::WNOHANG)
36
- status.exitstatus if pid
37
- end
38
-
39
- def start
40
- @pid = fork do
41
- unless $DEBUG
42
- [STDOUT, STDERR].each { |io| io.reopen("/dev/null") }
43
- end
44
-
45
- exec(*@args)
46
- end
47
-
48
- self
49
- end
50
-
51
- #
52
- # Tries increasingly harsher methods to make the process die within
53
- # a reasonable time
54
- #
55
-
56
- def ensure_death
57
- begin
58
- $stderr.puts "wait_nonblock(5) -> #{self}" if $DEBUG
59
- return wait_nonblock(5)
60
- rescue Error::TimeOutError
61
- # try next
62
- end
63
-
64
- $stderr.puts "TERM -> #{self}" if $DEBUG
65
- kill
66
-
67
- begin
68
- $stderr.puts "wait_nonblock(5) -> #{self}" if $DEBUG
69
- return wait_nonblock(5)
70
- rescue Error::TimeOutError
71
- # try next
72
- end
73
-
74
- $stderr.puts "KILL -> #{self}" if $DEBUG
75
- kill!
76
-
77
- $stderr.puts "wait_nonblock(5) -> #{self}" if $DEBUG
78
- wait_nonblock(5)
79
- rescue Errno::ECHILD
80
- # great!
81
- true
82
- end
83
-
84
- def wait_nonblock(timeout)
85
- end_time = Time.now + timeout
86
- until Time.now > end_time || exited = exit_value
87
- sleep 0.1
88
- end
89
-
90
- unless exited
91
- raise Error::TimeOutError, "process still alive after #{timeout} seconds"
92
- end
93
-
94
- exited
95
- end
96
-
97
- def wait
98
- assert_started
99
- Process.waitpid2 @pid
100
- rescue Errno::ECHILD
101
- nil
102
- end
103
-
104
- def kill
105
- assert_started
106
- Process.kill('TERM', @pid)
107
- end
108
-
109
- def kill!
110
- assert_started
111
- Process.kill('KILL', @pid)
112
- end
113
-
114
- def assert_started
115
- raise Error::WebDriverError, "process not started" unless @pid
116
- end
117
-
118
- module WindowsProcess
119
- def start
120
- require "win32/process" # adds a dependency on windows - perhaps we could just use FFI instead?
121
- @pid = Process.create(
122
- :app_name => @args.join(" "),
123
- :inherit => false # don't inherit open file handles
124
- ).process_id
125
-
126
- self
127
- end
128
-
129
- def wait_nonblock(timeout)
130
- # win32-process doesn't support passing a second argument to waitpid2
131
- # See the README @ http://rubyforge.org/docman/view.php/85/707/README.html
132
- if defined?(Process::WNOHANG) && Process.method(:waitpid2).arity != 1
133
- return super
134
- end
135
- Timeout.timeout(timeout, Error::TimeOutError) { wait }
136
- rescue Process::Error
137
- # no handle, great
138
- end
139
-
140
- def kill
141
- kill!
142
- end
143
- end
144
-
145
- module JRubyProcess
146
- def start
147
- require 'java'
148
- pb = java.lang.ProcessBuilder.new(@args)
149
-
150
- env = pb.environment
151
- ENV.each { |k,v| env.put(k, v) }
152
-
153
- @process = pb.start
154
-
155
- # Firefox 3.6 on Snow Leopard has a lot output on stderr, which makes
156
- # the launch act funny if we don't do something to the streams
157
-
158
- @process.getErrorStream.close
159
- @process.getInputStream.close
160
-
161
- # Closing the streams solves that problem, but on other platforms we might
162
- # need to actually read them.
163
-
164
- # Thread.new do
165
- # input, error = 0, 0
166
- # loop do
167
- # error = @process.getErrorStream.read if error != -1
168
- # input = @process.getInputStream.read if input != -1
169
- # break if error == -1 && input == -1
170
- # end
171
- # end
172
-
173
- self
174
- end
175
-
176
- def kill
177
- assert_started
178
- @process.destroy
179
- end
180
- alias_method :kill!, :kill
181
-
182
- def wait
183
- assert_started
184
- @process.waitFor
185
- [nil, @process.exitValue] # no robust way to get pid here
186
- end
187
-
188
- def exit_value
189
- assert_started
190
- @process.exitValue
191
- rescue java.lang.IllegalThreadStateException
192
- nil
193
- end
194
-
195
- def assert_started
196
- raise Error::WebDriverError, "process not started" unless @process
197
- end
198
- end
199
-
200
- module IronRubyProcess
201
- def start
202
- args = @args.dup
203
-
204
- @process = System::Diagnostics::Process.new
205
- @process.StartInfo.UseShellExecute = true
206
- @process.StartInfo.FileName = args.shift
207
- @process.StartInfo.Arguments = args.join ' '
208
- @process.start
209
-
210
- self
211
- end
212
-
213
- def kill
214
- assert_started
215
- @process.Kill
216
- end
217
-
218
- def wait
219
- assert_started
220
- @process.WaitForExit
221
- [pid, exit_value]
222
- end
223
-
224
- def pid
225
- assert_started
226
- @process.Id
227
- end
228
-
229
- def exit_value
230
- assert_started
231
- return unless @process.HasExited
232
-
233
- @process.ExitCode
234
- end
235
-
236
- def assert_started
237
- raise Error::WebDriverError, "process not started" unless @process
238
- end
239
- end
240
-
241
- end # ChildProcess
242
- end # WebDriver
243
- end # Selenium
@@ -1,27 +0,0 @@
1
- require 'zip/zip'
2
-
3
- module Selenium
4
- module WebDriver
5
- module ZipHelper
6
-
7
- def self.unzip(path)
8
- destination = Dir.mktmpdir("unzip")
9
- FileReaper << destination
10
-
11
- Zip::ZipFile.open(path) do |zip|
12
- zip.each do |entry|
13
- to = File.join(destination, entry.name)
14
- dirname = File.dirname(to)
15
-
16
- FileUtils.mkdir_p dirname unless File.exist? dirname
17
- zip.extract(entry, to)
18
- end
19
- end
20
-
21
- destination
22
- end
23
-
24
-
25
- end # ZipHelper
26
- end # WebDriver
27
- end # Selenium