selenium-webdriver 2.45.0 → 3.142.7

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 (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