selenium-webdriver 2.45.0 → 3.142.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +795 -3
  3. data/Gemfile +2 -0
  4. data/{COPYING → LICENSE} +1 -3
  5. data/README.md +13 -9
  6. data/lib/selenium/server.rb +93 -71
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +7 -0
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +102 -0
  9. data/lib/selenium/webdriver/atoms.rb +37 -0
  10. data/lib/selenium/webdriver/chrome/bridge.rb +47 -99
  11. data/lib/selenium/webdriver/chrome/driver.rb +127 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +190 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +40 -20
  14. data/lib/selenium/webdriver/chrome/service.rb +46 -62
  15. data/lib/selenium/webdriver/chrome.rb +34 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +69 -56
  17. data/lib/selenium/webdriver/common/alert.rb +25 -8
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +35 -20
  19. data/lib/selenium/webdriver/common/driver.rb +90 -63
  20. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +42 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +26 -11
  24. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +58 -0
  26. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +23 -6
  28. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +19 -2
  29. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +24 -7
  30. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +19 -3
  31. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +23 -7
  32. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +26 -5
  33. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +20 -6
  34. data/lib/selenium/webdriver/common/element.rb +79 -37
  35. data/lib/selenium/webdriver/common/error.rb +282 -106
  36. data/lib/selenium/webdriver/common/file_reaper.rb +23 -12
  37. data/lib/selenium/webdriver/common/html5/local_storage.rb +29 -12
  38. data/lib/selenium/webdriver/common/html5/session_storage.rb +29 -12
  39. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +29 -18
  40. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  41. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  42. data/lib/selenium/webdriver/common/interactions/interactions.rb +43 -0
  43. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  44. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  45. data/lib/selenium/webdriver/common/interactions/none_input.rb +36 -0
  46. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  47. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  48. data/lib/selenium/webdriver/common/keyboard.rb +27 -12
  49. data/lib/selenium/webdriver/common/keys.rb +118 -81
  50. data/lib/selenium/webdriver/common/log_entry.rb +27 -8
  51. data/lib/selenium/webdriver/common/logger.rb +115 -0
  52. data/lib/selenium/webdriver/common/logs.rb +24 -7
  53. data/lib/selenium/webdriver/common/manager.rb +177 -0
  54. data/lib/selenium/webdriver/common/mouse.rb +29 -12
  55. data/lib/selenium/webdriver/common/navigation.rb +21 -4
  56. data/lib/selenium/webdriver/common/options.rb +43 -126
  57. data/lib/selenium/webdriver/common/platform.rb +101 -97
  58. data/lib/selenium/webdriver/common/port_prober.rb +24 -17
  59. data/lib/selenium/webdriver/common/profile_helper.rb +27 -11
  60. data/lib/selenium/webdriver/common/proxy.rb +86 -73
  61. data/lib/selenium/webdriver/common/search_context.rb +49 -33
  62. data/lib/selenium/webdriver/common/service.rb +219 -0
  63. data/lib/selenium/webdriver/common/socket_lock.rb +82 -0
  64. data/lib/selenium/webdriver/common/socket_poller.rb +47 -26
  65. data/lib/selenium/webdriver/common/target_locator.rb +35 -14
  66. data/lib/selenium/webdriver/common/timeouts.rb +23 -6
  67. data/lib/selenium/webdriver/common/touch_action_builder.rb +25 -11
  68. data/lib/selenium/webdriver/common/touch_screen.rb +42 -24
  69. data/lib/selenium/webdriver/common/w3c_action_builder.rb +212 -0
  70. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  71. data/lib/selenium/webdriver/common/wait.rb +34 -14
  72. data/lib/selenium/webdriver/common/window.rb +75 -16
  73. data/lib/selenium/webdriver/common/zipper.rb +26 -11
  74. data/lib/selenium/webdriver/common.rb +40 -7
  75. data/lib/selenium/webdriver/edge/bridge.rb +76 -0
  76. data/lib/selenium/webdriver/edge/driver.rb +66 -0
  77. data/lib/selenium/webdriver/edge/options.rb +80 -0
  78. data/lib/selenium/webdriver/edge/service.rb +52 -0
  79. data/lib/selenium/webdriver/edge.rb +44 -0
  80. data/lib/selenium/webdriver/firefox/binary.rb +70 -48
  81. data/lib/selenium/webdriver/firefox/driver.rb +50 -0
  82. data/lib/selenium/webdriver/firefox/extension/prefs.json +14 -13
  83. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  84. data/lib/selenium/webdriver/firefox/extension.rb +50 -19
  85. data/lib/selenium/webdriver/firefox/launcher.rb +33 -28
  86. data/lib/selenium/webdriver/firefox/legacy/driver.rb +83 -0
  87. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +49 -0
  88. data/lib/selenium/webdriver/firefox/marionette/driver.rb +90 -0
  89. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  90. data/lib/selenium/webdriver/firefox/profile.rb +66 -48
  91. data/lib/selenium/webdriver/firefox/profiles_ini.rb +28 -16
  92. data/lib/selenium/webdriver/firefox/service.rb +52 -0
  93. data/lib/selenium/webdriver/firefox/util.rb +19 -2
  94. data/lib/selenium/webdriver/firefox.rb +46 -10
  95. data/lib/selenium/webdriver/ie/driver.rb +85 -0
  96. data/lib/selenium/webdriver/ie/options.rb +138 -0
  97. data/lib/selenium/webdriver/ie/service.rb +54 -0
  98. data/lib/selenium/webdriver/ie.rb +32 -10
  99. data/lib/selenium/webdriver/remote/bridge.rb +117 -572
  100. data/lib/selenium/webdriver/remote/capabilities.rb +116 -99
  101. data/lib/selenium/webdriver/remote/driver.rb +51 -0
  102. data/lib/selenium/webdriver/remote/http/common.rb +54 -23
  103. data/lib/selenium/webdriver/remote/http/curb.rb +30 -12
  104. data/lib/selenium/webdriver/remote/http/default.rb +85 -42
  105. data/lib/selenium/webdriver/remote/http/persistent.rb +29 -7
  106. data/lib/selenium/webdriver/remote/oss/bridge.rb +594 -0
  107. data/lib/selenium/webdriver/remote/oss/commands.rb +223 -0
  108. data/lib/selenium/webdriver/remote/response.rb +68 -30
  109. data/lib/selenium/webdriver/remote/server_error.rb +22 -5
  110. data/lib/selenium/webdriver/remote/w3c/bridge.rb +605 -0
  111. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +310 -0
  112. data/lib/selenium/webdriver/remote/w3c/commands.rb +157 -0
  113. data/lib/selenium/webdriver/remote.rb +27 -13
  114. data/lib/selenium/webdriver/safari/bridge.rb +38 -107
  115. data/lib/selenium/webdriver/safari/driver.rb +68 -0
  116. data/lib/selenium/webdriver/safari/options.rb +56 -75
  117. data/lib/selenium/webdriver/safari/service.rb +38 -0
  118. data/lib/selenium/webdriver/safari.rb +49 -31
  119. data/lib/selenium/webdriver/support/abstract_event_listener.rb +40 -6
  120. data/lib/selenium/webdriver/support/block_event_listener.rb +24 -7
  121. data/lib/selenium/webdriver/support/color.rb +82 -46
  122. data/lib/selenium/webdriver/support/escaper.rb +43 -0
  123. data/lib/selenium/webdriver/support/event_firing_bridge.rb +56 -39
  124. data/lib/selenium/webdriver/support/select.rb +66 -89
  125. data/lib/selenium/webdriver/support.rb +20 -0
  126. data/lib/selenium/webdriver/version.rb +24 -0
  127. data/lib/selenium/webdriver.rb +55 -25
  128. data/lib/selenium-webdriver.rb +19 -0
  129. data/selenium-webdriver.gemspec +42 -29
  130. metadata +331 -260
  131. data/Gemfile.lock +0 -48
  132. data/lib/selenium/client/base.rb +0 -132
  133. data/lib/selenium/client/driver.rb +0 -10
  134. data/lib/selenium/client/errors.rb +0 -9
  135. data/lib/selenium/client/extensions.rb +0 -118
  136. data/lib/selenium/client/idiomatic.rb +0 -488
  137. data/lib/selenium/client/javascript_expression_builder.rb +0 -116
  138. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -13
  139. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -13
  140. data/lib/selenium/client/legacy_driver.rb +0 -1720
  141. data/lib/selenium/client/protocol.rb +0 -104
  142. data/lib/selenium/client/selenium_helper.rb +0 -34
  143. data/lib/selenium/client.rb +0 -38
  144. data/lib/selenium/rake/server_task.rb +0 -157
  145. data/lib/selenium/webdriver/android/bridge.rb +0 -49
  146. data/lib/selenium/webdriver/android.rb +0 -9
  147. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -9
  148. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -42
  149. data/lib/selenium/webdriver/common/core_ext/string.rb +0 -5
  150. data/lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb +0 -17
  151. data/lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb +0 -39
  152. data/lib/selenium/webdriver/common/html5/location.rb +0 -0
  153. data/lib/selenium/webdriver/common/json_helper.rb +0 -34
  154. data/lib/selenium/webdriver/firefox/bridge.rb +0 -70
  155. data/lib/selenium/webdriver/firefox/socket_lock.rb +0 -61
  156. data/lib/selenium/webdriver/ie/bridge.rb +0 -69
  157. data/lib/selenium/webdriver/ie/server.rb +0 -90
  158. data/lib/selenium/webdriver/iphone/bridge.rb +0 -45
  159. data/lib/selenium/webdriver/iphone.rb +0 -9
  160. data/lib/selenium/webdriver/opera/bridge.rb +0 -112
  161. data/lib/selenium/webdriver/opera/service.rb +0 -49
  162. data/lib/selenium/webdriver/opera.rb +0 -24
  163. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -59
  164. data/lib/selenium/webdriver/phantomjs/service.rb +0 -90
  165. data/lib/selenium/webdriver/phantomjs.rb +0 -22
  166. data/lib/selenium/webdriver/remote/commands.rb +0 -192
  167. data/lib/selenium/webdriver/safari/browser.rb +0 -20
  168. data/lib/selenium/webdriver/safari/extensions.rb +0 -170
  169. data/lib/selenium/webdriver/safari/resources/SafariDriver.safariextz +0 -0
  170. data/lib/selenium/webdriver/safari/resources/client.js +0 -6903
  171. data/lib/selenium/webdriver/safari/server.rb +0 -145
  172. data/lib/selenium-client.rb +0 -2
@@ -1,104 +0,0 @@
1
- module Selenium
2
- module Client
3
-
4
- HTTP_HEADERS = { 'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8' }
5
-
6
- # Module in charge of handling Selenium over-the-wire HTTP protocol
7
- module Protocol
8
- attr_reader :session_id
9
-
10
- def remote_control_command(verb, args=[])
11
- timeout(@default_timeout_in_seconds) do
12
- status, response = http_post(http_request_for(verb, args))
13
- raise CommandError, response unless status == "OK"
14
- response[3..-1] # strip "OK," from response
15
- end
16
- end
17
-
18
- def string_command(verb, args=[])
19
- remote_control_command(verb, args)
20
- end
21
-
22
- def string_array_command(verb, args=[])
23
- csv = string_command(verb, args)
24
- token = ""
25
- tokens = []
26
- escape = false
27
- csv.split(//).each do |letter|
28
- if escape
29
- token += letter
30
- escape = false
31
- next
32
- end
33
- case letter
34
- when '\\'
35
- escape = true
36
- when ','
37
- tokens << token
38
- token = ""
39
- else
40
- token += letter
41
- end
42
- end
43
- tokens << token
44
- return tokens
45
- end
46
-
47
- def number_command(verb, args)
48
- string_command verb, args
49
- end
50
-
51
- def number_array_command(verb, args)
52
- string_array_command verb, args
53
- end
54
-
55
- def boolean_command(verb, args=[])
56
- parse_boolean_value string_command(verb, args)
57
- end
58
-
59
- def boolean_array_command(verb, args)
60
- string_array_command(verb, args).collect {|value| parse_boolean_value(value)}
61
- end
62
-
63
- protected
64
-
65
- def parse_boolean_value(value)
66
- if ("true" == value)
67
- return true
68
- elsif ("false" == value)
69
- return false
70
- end
71
- raise ProtocolError, "Invalid Selenese boolean value that is neither 'true' nor 'false': got '#{value}'"
72
- end
73
-
74
- def http_request_for(verb, args)
75
- data = "cmd=#{CGI::escape(verb)}"
76
- args.each_with_index do |arg, index|
77
- data << "&#{index.succ}=#{CGI::escape(arg.to_s)}"
78
- end
79
- data << "&sessionId=#{session_id}" unless session_id.nil?
80
- data
81
- end
82
-
83
- def http_post(data)
84
- start = Time.now
85
- called_from = caller.detect{|line| line !~ /(selenium-client|vendor|usr\/lib\/ruby|\(eval\))/i}
86
- http = Net::HTTP.new(@host, @port)
87
- http.open_timeout = default_timeout_in_seconds
88
- http.read_timeout = default_timeout_in_seconds
89
- response = http.post('/selenium-server/driver/', data, HTTP_HEADERS)
90
- if response.body !~ /^OK/
91
- puts "#{start} selenium-client received failure from selenium server:"
92
- puts "requested:"
93
- puts "\t" + CGI::unescape(data.split('&').join("\n\t"))
94
- puts "received:"
95
- puts "\t#{response.body.inspect}"
96
- puts "\tcalled from #{called_from}"
97
- end
98
- [ response.body[0..1], response.body ]
99
- end
100
-
101
- end
102
-
103
- end
104
- end
@@ -1,34 +0,0 @@
1
- # Defines a mixin module that you can use to write Selenium tests
2
- # without typing "@selenium." in front of every command. Every
3
- # call to a missing method will be automatically sent to the @selenium
4
- # object.
5
- module Selenium
6
- module Client
7
-
8
- module SeleniumHelper
9
-
10
- # Overrides default open method to actually delegates to @selenium
11
- def open(url)
12
- @selenium.open url
13
- end
14
-
15
- # Overrides default type method to actually delegates to @selenium
16
- def type(locator, value)
17
- @selenium.type locator, value
18
- end
19
-
20
- # Overrides default select method to actually delegates to @selenium
21
- def select(input_locator, option_locator)
22
- @selenium.select input_locator, option_locator
23
- end
24
-
25
- # Delegates to @selenium on method missing
26
- def method_missing(method_name, *args)
27
- return super unless @selenium.respond_to?(method_name)
28
-
29
- @selenium.send(method_name, *args)
30
- end
31
- end
32
-
33
- end
34
- end
@@ -1,38 +0,0 @@
1
- require 'net/http'
2
- require 'uri'
3
- require 'cgi'
4
- require 'digest/md5'
5
- require 'base64'
6
- require 'fileutils'
7
- require 'tmpdir'
8
-
9
- require 'selenium/client/errors'
10
- require 'selenium/client/protocol'
11
- require 'selenium/client/legacy_driver'
12
- require 'selenium/client/javascript_expression_builder'
13
- require 'selenium/client/javascript_frameworks/prototype'
14
- require 'selenium/client/javascript_frameworks/jquery'
15
- require 'selenium/client/extensions'
16
- require 'selenium/client/idiomatic'
17
- require 'selenium/client/base'
18
- require 'selenium/client/driver'
19
- require 'selenium/client/selenium_helper'
20
- require 'selenium/server'
21
-
22
- module Selenium
23
- DEPRECATED_CONSTANTS = {
24
- :SeleniumDriver => Selenium::Client::Driver,
25
- :CommandError => Selenium::Client::CommandError
26
- }
27
-
28
- def self.const_missing(name)
29
- if replacement = DEPRECATED_CONSTANTS[name.to_sym]
30
- warn "the Selenium::#{name} constant has been deprecated, please use #{replacement} instead"
31
- replacement
32
- else
33
- super
34
- end
35
- end
36
-
37
- autoload :Rake, 'selenium/rake/server_task'
38
- end # Selenium
@@ -1,157 +0,0 @@
1
- require 'selenium/server'
2
- require 'rake'
3
-
4
- module Selenium
5
- module Rake
6
-
7
- class MissingJarFileError < StandardError
8
- end
9
-
10
- #
11
- # Defines rake tasks for starting, stopping and restarting the Selenium server.
12
- #
13
- # Usage:
14
- #
15
- # require 'selenium/rake/server_task'
16
- #
17
- # Selenium::Rake::ServerTask.new do |t|
18
- # t.jar = "/path/to/selenium-server-standalone.jar"
19
- # t.port = 4444
20
- # t.opts = %w[-some options]
21
- # end
22
- #
23
- # Alternatively, you can have the task download a specific version of the server:
24
- #
25
- # Selenium::Rake::ServerTask.new(:server) do |t|
26
- # t.version = '2.6.0'
27
- # end
28
- #
29
- # or the latest version
30
- #
31
- # Selenium::Rake::ServerTask.new(:server) do |t|
32
- # t.version = :latest
33
- # end
34
- #
35
- #
36
- # Tasks defined:
37
- #
38
- # rake selenium:server:start
39
- # rake selenium:server:stop
40
- # rake selenium:server:restart
41
- #
42
-
43
- class ServerTask
44
- include ::Rake::DSL if defined?(::Rake::DSL)
45
-
46
- #
47
- # Path to the selenium server jar
48
- #
49
-
50
- attr_accessor :jar
51
-
52
- #
53
- # Port to use for the server.
54
- # Default: 4444
55
- #
56
- #
57
-
58
- attr_accessor :port
59
-
60
- #
61
- # Timeout in seconds for the server to start/stop.
62
- # Default: 30
63
- #
64
-
65
- attr_accessor :timeout
66
-
67
- #
68
- # Whether we should detach from the server process.
69
- # Default: true
70
- #
71
-
72
- attr_accessor :background
73
- alias_method :background?, :background
74
-
75
- #
76
- # Configure logging. Pass a log file path or a boolean.
77
- # Default: true
78
- #
79
- # true - log to stdout/stderr
80
- # false - no logging
81
- # String - log to the specified file
82
- #
83
-
84
- attr_accessor :log
85
-
86
- #
87
- # Add additional options passed to the server jar.
88
- #
89
-
90
- attr_accessor :opts
91
-
92
- #
93
- # Specify the version of the server jar to download
94
- #
95
-
96
- attr_accessor :version
97
-
98
-
99
- def initialize(prefix = "selenium:server")
100
- @jar = nil
101
- @prefix = prefix
102
- @port = 4444
103
- @timeout = 30
104
- @background = true
105
- @log = true
106
- @opts = []
107
- @version = nil
108
-
109
- yield self if block_given?
110
-
111
- if @version
112
- @jar = Selenium::Server.download(@version)
113
- end
114
-
115
- unless @jar
116
- raise MissingJarFileError, "must provide path to the selenium server jar"
117
- end
118
-
119
- @server = Selenium::Server.new(@jar, :port => @port,
120
- :timeout => @timeout,
121
- :background => @background,
122
- :log => @log )
123
-
124
- @server << @opts
125
-
126
- define_start_task
127
- define_stop_task
128
- define_restart_task
129
- end
130
-
131
- private
132
-
133
- def define_start_task
134
- desc "Start the Selenium server"
135
- task "#{@prefix}:start" do
136
- @server.start
137
- end
138
- end
139
-
140
- def define_stop_task
141
- desc 'Stop the Selenium server'
142
- task "#{@prefix}:stop" do
143
- @server.stop
144
- end
145
- end
146
-
147
- def define_restart_task
148
- desc 'Restart the Selenium server'
149
- task "#{@prefix}:restart" do
150
- @server.stop
151
- @server.start
152
- end
153
- end
154
-
155
- end # ServerTask
156
- end # Rake
157
- end # Selenium
@@ -1,49 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Android
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- class Bridge < Remote::Bridge
10
-
11
- DEFAULT_URL = "http://#{Platform.localhost}:8080/wd/hub/"
12
-
13
- def initialize(opts = {})
14
- warn 'The Android driver is deprecated - please use either http://selendroid.io or http://appium.io instead.'
15
-
16
- remote_opts = {
17
- :url => opts.fetch(:url, DEFAULT_URL),
18
- :desired_capabilities => opts.fetch(:desired_capabilities, capabilities),
19
- }
20
-
21
- remote_opts[:http_client] = opts[:http_client] if opts.has_key?(:http_client)
22
-
23
- super remote_opts
24
- end
25
-
26
- def browser
27
- :android
28
- end
29
-
30
- def driver_extensions
31
- [
32
- DriverExtensions::TakesScreenshot,
33
- DriverExtensions::Rotatable,
34
- DriverExtensions::HasInputDevices,
35
- DriverExtensions::HasWebStorage,
36
- DriverExtensions::HasLocation,
37
- DriverExtensions::HasBrowserConnection,
38
- DriverExtensions::HasTouchScreen
39
- ]
40
- end
41
-
42
- def capabilities
43
- @capabilities ||= Remote::Capabilities.android
44
- end
45
-
46
- end # Bridge
47
- end # Android
48
- end # WebDriver
49
- end # Selenium
@@ -1,9 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Android
4
-
5
- end # Android
6
- end # WebDriver
7
- end # Selenium
8
-
9
- require 'selenium/webdriver/android/bridge'
@@ -1,9 +0,0 @@
1
- require 'base64'
2
-
3
- module Base64
4
-
5
- def self.strict_encode64(str)
6
- encode64(str).gsub(/\n/, '')
7
- end unless respond_to?(:strict_encode64) # added in 1.9
8
-
9
- end
@@ -1,42 +0,0 @@
1
- class Dir
2
- # @api private
3
- def self.mktmpdir(prefix_suffix=nil, tmpdir=nil)
4
- case prefix_suffix
5
- when nil
6
- prefix = "d"
7
- suffix = ""
8
- when String
9
- prefix = prefix_suffix
10
- suffix = ""
11
- when Array
12
- prefix = prefix_suffix[0]
13
- suffix = prefix_suffix[1]
14
- else
15
- raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
16
- end
17
- tmpdir ||= Dir.tmpdir
18
- t = Time.now.strftime("%Y%m%d")
19
- n = nil
20
- begin
21
- path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
22
- path << "-#{n}" if n
23
- path << suffix
24
- Dir.mkdir(path, 0700)
25
- rescue Errno::EEXIST
26
- n ||= 0
27
- n += 1
28
- retry
29
- end
30
-
31
- if block_given?
32
- begin
33
- yield path
34
- ensure
35
- FileUtils.remove_entry_secure path
36
- end
37
- else
38
- path
39
- end
40
- end unless respond_to? :mktmpdir # > 1.8.7
41
- end
42
-
@@ -1,5 +0,0 @@
1
- unless '1.9'.respond_to?(:bytesize)
2
- class String
3
- alias :bytesize :size
4
- end
5
- end
@@ -1,17 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module DriverExtensions
4
-
5
- module HasBrowserConnection
6
- def online?
7
- @bridge.isBrowserOnline
8
- end
9
-
10
- def online=(bool)
11
- @bridge.setBrowserOnline bool
12
- end
13
- end
14
-
15
- end
16
- end
17
- end
@@ -1,39 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
-
4
- #
5
- # @api private
6
- #
7
-
8
- module DriverExtensions
9
- module HasInputDevices
10
-
11
- #
12
- # @return [ActionBuilder]
13
- # @api public
14
- #
15
-
16
- def action
17
- ActionBuilder.new mouse, keyboard
18
- end
19
-
20
- #
21
- # @api private
22
- #
23
-
24
- def mouse
25
- Mouse.new @bridge
26
- end
27
-
28
- #
29
- # @api private
30
- #
31
-
32
- def keyboard
33
- Keyboard.new @bridge
34
- end
35
-
36
- end # HasInputDevices
37
- end # DriverExtensions
38
- end # WebDriver
39
- end # Selenium
File without changes
@@ -1,34 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module JsonHelper
4
-
5
- # ActiveSupport may define Object#load, so we can't use MultiJson.respond_to? here
6
- sm = MultiJson.singleton_methods.map { |e| e.to_sym }
7
-
8
- if sm.include? :load
9
- # @api private
10
- def json_load(obj)
11
- MultiJson.load(obj)
12
- end
13
- else
14
- # @api private
15
- def json_load(obj)
16
- MultiJson.decode(obj)
17
- end
18
- end
19
-
20
- if sm.include? :dump
21
- # @api private
22
- def json_dump(obj)
23
- MultiJson.dump(obj)
24
- end
25
- else
26
- # @api private
27
- def json_dump(obj)
28
- MultiJson.encode(obj)
29
- end
30
- end
31
-
32
- end
33
- end
34
- end
@@ -1,70 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Firefox
4
-
5
- # @api private
6
- class Bridge < Remote::Bridge
7
-
8
- def initialize(opts = {})
9
- port = opts.delete(:port) || DEFAULT_PORT
10
- profile = opts.delete(:profile)
11
- http_client = opts.delete(:http_client)
12
- proxy = opts.delete(:proxy)
13
-
14
- caps = opts.delete(:desired_capabilities) do
15
- Remote::Capabilities.firefox(:native_events => DEFAULT_ENABLE_NATIVE_EVENTS)
16
- end
17
-
18
- @launcher = create_launcher(port, profile)
19
-
20
- unless opts.empty?
21
- raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
22
- end
23
-
24
- @launcher.launch
25
-
26
- caps.proxy = proxy if proxy
27
-
28
- remote_opts = {
29
- :url => @launcher.url,
30
- :desired_capabilities => caps
31
- }
32
-
33
- remote_opts.merge!(:http_client => http_client) if http_client
34
-
35
- begin
36
- super(remote_opts)
37
- rescue
38
- @launcher.quit
39
- raise
40
- end
41
- end
42
-
43
- def browser
44
- :firefox
45
- end
46
-
47
- def driver_extensions
48
- [
49
- DriverExtensions::TakesScreenshot,
50
- DriverExtensions::HasInputDevices
51
- ]
52
- end
53
-
54
- def quit
55
- super
56
- nil
57
- ensure
58
- @launcher.quit
59
- end
60
-
61
- private
62
-
63
- def create_launcher(port, profile)
64
- Launcher.new Binary.new, port, profile
65
- end
66
-
67
- end # Bridge
68
- end # Firefox
69
- end # WebDriver
70
- end # Selenium
@@ -1,61 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Firefox
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- class SocketLock
10
-
11
- def initialize(port, timeout)
12
- @port = port
13
- @timeout = timeout
14
- end
15
-
16
- def locked(&blk)
17
- lock
18
-
19
- begin
20
- yield
21
- ensure
22
- release
23
- end
24
- end
25
-
26
- private
27
-
28
- def lock
29
- max_time = Time.now + @timeout
30
-
31
- until can_lock? || Time.now >= max_time
32
- sleep 0.1
33
- end
34
-
35
- unless did_lock?
36
- raise Error::WebDriverError, "unable to bind to locking port #{@port} within #{@timeout} seconds"
37
- end
38
- end
39
-
40
- def release
41
- @server && @server.close
42
- end
43
-
44
- def can_lock?
45
- @server = TCPServer.new(Platform.localhost, @port)
46
- ChildProcess.close_on_exec @server
47
-
48
- true
49
- rescue SocketError, Errno::EADDRINUSE, Errno::EBADF => ex
50
- $stderr.puts "#{self}: #{ex.message}" if $DEBUG
51
- false
52
- end
53
-
54
- def did_lock?
55
- !!@server
56
- end
57
-
58
- end # SocketLock
59
- end # Firefox
60
- end # WebDriver
61
- end # Selenium