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,69 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module IE
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- class Bridge < Remote::Bridge
10
-
11
- HOST = Platform.localhost
12
- DEFAULT_PORT = 5555
13
- DEFAULT_TIMEOUT = 30
14
-
15
- def initialize(opts = {})
16
- caps = opts.delete(:desired_capabilities) { Remote::Capabilities.internet_explorer }
17
- timeout = opts.delete(:timeout) { DEFAULT_TIMEOUT }
18
- port = opts.delete(:port) { PortProber.above(DEFAULT_PORT) }
19
- http_client = opts.delete(:http_client)
20
- ignore_mode = opts.delete(:introduce_flakiness_by_ignoring_security_domains)
21
- native_events = opts.delete(:native_events) != false
22
- implementation = opts.delete(:implementation)
23
-
24
- @server = Server.get(:implementation => implementation)
25
-
26
- @server.log_level = opts.delete(:log_level) if opts[:log_level]
27
- @server.log_file = opts.delete(:log_file) if opts[:log_file]
28
-
29
- unless opts.empty?
30
- raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
31
- end
32
-
33
- @port = @server.start Integer(port), timeout
34
-
35
- if ignore_mode
36
- caps['ignoreProtectedModeSettings'] = true
37
- end
38
-
39
- caps['nativeEvents'] = native_events
40
-
41
- remote_opts = {
42
- :url => @server.uri,
43
- :desired_capabilities => caps
44
- }
45
-
46
- remote_opts[:http_client] = http_client if http_client
47
-
48
- super(remote_opts)
49
- end
50
-
51
- def browser
52
- :internet_explorer
53
- end
54
-
55
- def driver_extensions
56
- [DriverExtensions::TakesScreenshot, DriverExtensions::HasInputDevices]
57
- end
58
-
59
- def quit
60
- super
61
- nil
62
- ensure
63
- @server.stop
64
- end
65
-
66
- end # Bridge
67
- end # IE
68
- end # WebDriver
69
- end # Selenium
@@ -1,90 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module IE
4
- class Server
5
-
6
- STOP_TIMEOUT = 5
7
-
8
- def self.get(opts = {})
9
- binary = IE.driver_path || Platform.find_binary("IEDriverServer")
10
-
11
- if binary
12
- new binary, opts
13
- else
14
- raise Error::WebDriverError,
15
- "Unable to find standalone executable. Please download the IEDriverServer from http://selenium-release.storage.googleapis.com/index.html and place the executable on your PATH."
16
- end
17
- end
18
-
19
- attr_accessor :log_level, :log_file
20
-
21
- def initialize(binary_path, opts = {})
22
- Platform.assert_executable binary_path
23
-
24
- @binary_path = binary_path
25
- @process = nil
26
-
27
- opts = opts.dup
28
-
29
- @log_level = opts.delete(:log_level)
30
- @log_file = opts.delete(:log_file)
31
- @implementation = opts.delete(:implementation)
32
-
33
- unless opts.empty?
34
- raise ArgumentError, "invalid option#{'s' if opts.size != 1}: #{opts.inspect}"
35
- end
36
-
37
- end
38
-
39
- def start(port, timeout)
40
- return @port if running?
41
-
42
- @port = port
43
-
44
- @process = ChildProcess.new(@binary_path, *server_args)
45
- @process.io.inherit! if $DEBUG
46
- @process.start
47
-
48
- unless SocketPoller.new(Platform.localhost, @port, timeout).connected?
49
- raise Error::WebDriverError, "unable to connect to IE server within #{timeout} seconds"
50
- end
51
-
52
- Platform.exit_hook { stop }
53
-
54
- @port
55
- end
56
-
57
- def stop
58
- if running?
59
- @process.stop STOP_TIMEOUT
60
- end
61
- end
62
-
63
- def port
64
- @port
65
- end
66
-
67
- def uri
68
- "http://#{Platform.localhost}:#{port}"
69
- end
70
-
71
- def running?
72
- @process && @process.alive?
73
- end
74
-
75
- private
76
-
77
- def server_args
78
- args = ["--port=#{@port}"]
79
-
80
- args << "--log-level=#{@log_level.to_s.upcase}" if @log_level
81
- args << "--log-file=#{@log_file}" if @log_file
82
- args << "--implementation=#{@implementation.to_s.upcase}" if @implementation
83
-
84
- args
85
- end
86
-
87
- end
88
- end
89
- end
90
- end
@@ -1,45 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module IPhone
4
- #
5
- # @api private
6
- #
7
-
8
- class Bridge < Remote::Bridge
9
-
10
- DEFAULT_URL = "http://#{Platform.localhost}:3001/wd/hub/"
11
-
12
- def initialize(opts = {})
13
- warn 'The iPhone driver is deprecated - please use either http://appium.io/ or http://ios-driver.github.io/ios-driver/ instead'
14
-
15
- remote_opts = {
16
- :url => opts.fetch(:url, DEFAULT_URL),
17
- :desired_capabilities => opts.fetch(:desired_capabilities, capabilities),
18
- }
19
-
20
- remote_opts[:http_client] = opts[:http_client] if opts.has_key?(:http_client)
21
-
22
- super remote_opts
23
- end
24
-
25
- def browser
26
- :iphone
27
- end
28
-
29
- def driver_extensions
30
- [
31
- DriverExtensions::TakesScreenshot,
32
- DriverExtensions::HasInputDevices,
33
- DriverExtensions::HasWebStorage,
34
- DriverExtensions::HasLocation
35
- ]
36
- end
37
-
38
- def capabilities
39
- @capabilities ||= Remote::Capabilities.iphone
40
- end
41
-
42
- end # Bridge
43
- end # IPhone
44
- end # WebDriver
45
- end # Selenium
@@ -1,9 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module IPhone
4
-
5
- end # IPhone
6
- end # WebDriver
7
- end # Selenium
8
-
9
- require 'selenium/webdriver/iphone/bridge'
@@ -1,112 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Opera
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- LOGGING_LEVELS = [:severe, :warning, :info, :config, :fine, :finer, :finest, :all]
10
-
11
- class Bridge < Remote::Bridge
12
-
13
- def initialize(opts = {})
14
- @service = Service.default_service :log => (opts[:logging_level] ? true : false)
15
-
16
- http_client = opts.delete(:http_client)
17
- caps = create_capabilities(opts)
18
-
19
- @service.start
20
-
21
- remote_opts = {
22
- :url => @service.uri,
23
- :desired_capabilities => caps
24
- }
25
-
26
- remote_opts.merge!(:http_client => http_client) if http_client
27
-
28
- super(remote_opts)
29
- end
30
-
31
- def browser
32
- :opera
33
- end
34
-
35
- def driver_extensions
36
- [
37
- DriverExtensions::HasInputDevices,
38
- DriverExtensions::TakesScreenshot
39
- ]
40
- end
41
-
42
- def capabilities
43
- @capabilities ||= Remote::Capabilities.opera
44
- end
45
-
46
- def quit
47
- super
48
- ensure
49
- @service.stop
50
- end
51
-
52
- private
53
-
54
- def create_capabilities(opts)
55
- original_opts = opts.dup
56
-
57
- arguments = opts.delete(:arguments)
58
- logging_level = opts.delete(:logging_level)
59
- logging_file = opts.delete(:logging_file)
60
- host = opts.delete(:host)
61
- port = opts.delete(:port)
62
- launcher = opts.delete(:launcher)
63
- profile = opts.delete(:profile)
64
- idle = opts.delete(:idle)
65
- display = opts.delete(:display)
66
- autostart = opts.delete(:autostart)
67
- no_restart = opts.delete(:no_restart)
68
- no_quit = opts.delete(:no_quit)
69
- product = opts.delete(:product)
70
- caps = opts.delete(:desired_capabilities) { Remote::Capabilities.opera }
71
-
72
- unless opts.empty?
73
- raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
74
- end
75
-
76
- if arguments
77
- unless arguments.kind_of? Array
78
- raise ArgumentError, ':arguments must be an Array of Strings'
79
- end
80
-
81
- caps.merge! 'opera.arguments' => arguments.join(' ')
82
- end
83
-
84
- if logging_level
85
- unless LOGGING_LEVELS.include?(logging_level)
86
- raise ArgumentError,
87
- "unknown logging level #{logging_level.inspect}, available levels: #{LOGGING_LEVELS.inspect}"
88
- end
89
-
90
- caps.merge! 'opera.logging.level' => logging_level.to_s.upcase
91
- end
92
-
93
- caps.merge! 'opera.logging.file' => logging_file if logging_file
94
- caps.merge! 'opera.binary' => Opera.path if Opera.path
95
- caps.merge! 'opera.host' => host if host
96
- caps.merge! 'opera.port' => port.to_i if port
97
- caps.merge! 'opera.launcher' => launcher if launcher
98
- caps.merge! 'opera.profile' => profile if original_opts.has_key?(:profile)
99
- caps.merge! 'opera.idle' => !!idle unless idle.nil?
100
- caps.merge! 'opera.display' => display.to_i if display
101
- caps.merge! 'opera.autostart' => !!autostart unless autostart.nil?
102
- caps.merge! 'opera.no_restart' => !!no_restart unless no_restart.nil?
103
- caps.merge! 'opera.no_quit' => !!no_quit unless no_quit.nil?
104
- caps.merge! 'opera.product' => product if product
105
-
106
- caps
107
- end
108
-
109
- end
110
- end
111
- end
112
- end
@@ -1,49 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module Opera
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- class Service
10
- MISSING_TEXT = 'Unable to find the Selenium server jar. Please download the standalone server from http://selenium-release.storage.googleapis.com/index.html and set the SELENIUM_SERVER_JAR environmental variable to its location. More info at http://code.google.com/p/selenium/wiki/OperaDriver.'
11
-
12
- def self.selenium_server_jar
13
- @selenium_server_jar ||= (
14
- ENV['SELENIUM_SERVER_JAR'] or raise Error::WebDriverError, MISSING_TEXT
15
- )
16
- end
17
-
18
- def self.selenium_server_jar=(path)
19
- Platform.assert_file path
20
- @selenium_server_jar = path
21
- end
22
-
23
- def self.default_service(opts = {})
24
- new selenium_server_jar, opts
25
- end
26
-
27
- def initialize(jar, opts = {})
28
- opts.merge! :background => true, :port => PortProber.above(4444)
29
- opts.merge! :log => !!$DEBUG if $DEBUG
30
- @server = Selenium::Server.new File.expand_path(jar), opts
31
- end
32
-
33
- def uri
34
- @server.webdriver_url
35
- end
36
-
37
- def start
38
- @server.start
39
- Platform.exit_hook { stop } # make sure we don't leave the server running
40
- end
41
-
42
- def stop
43
- @server.stop
44
- end
45
- end
46
-
47
- end
48
- end
49
- end
@@ -1,24 +0,0 @@
1
- require 'selenium/server'
2
- require 'selenium/webdriver/opera/service'
3
- require 'selenium/webdriver/opera/bridge'
4
-
5
- module Selenium
6
- module WebDriver
7
-
8
- module Opera
9
- def self.driver_path=(path)
10
- Service.selenium_server_jar = path
11
- end
12
-
13
- def self.path=(path)
14
- Platform.assert_executable path
15
- @path = path
16
- end
17
-
18
- def self.path
19
- @path ||= nil
20
- end
21
- end
22
-
23
- end
24
- end
@@ -1,59 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module PhantomJS
4
-
5
-
6
- # @api private
7
- class Bridge < Remote::Bridge
8
-
9
- def initialize(opts = {})
10
- http_client = opts.delete(:http_client)
11
- caps = opts.delete(:desired_capabilities) { Remote::Capabilities.phantomjs }
12
-
13
- if opts.has_key?(:url)
14
- url = opts.delete(:url)
15
- else
16
- args = opts.delete(:args) || caps['phantomjs.cli.args']
17
- port = opts.delete(:port)
18
-
19
- @service = Service.default_service(port)
20
- @service.start(args)
21
-
22
- url = @service.uri
23
- end
24
-
25
- remote_opts = {
26
- :url => url,
27
- :desired_capabilities => caps
28
- }
29
-
30
- remote_opts.merge!(:http_client => http_client) if http_client
31
-
32
- super(remote_opts)
33
- end
34
-
35
- def browser
36
- :phantomjs
37
- end
38
-
39
- def driver_extensions
40
- [
41
- DriverExtensions::TakesScreenshot,
42
- DriverExtensions::HasInputDevices
43
- ]
44
- end
45
-
46
- def capabilities
47
- @capabilities ||= Remote::Capabilities.phantomjs
48
- end
49
-
50
- def quit
51
- super
52
- ensure
53
- @service.stop if @service
54
- end
55
-
56
- end # Bridge
57
- end # PhantomJS
58
- end # WebDriver
59
- end # Selenium
@@ -1,90 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module PhantomJS
4
-
5
- #
6
- # @api private
7
- #
8
-
9
- class Service
10
- START_TIMEOUT = 20
11
- STOP_TIMEOUT = 5
12
- DEFAULT_PORT = 8910
13
- MISSING_TEXT = "Unable to find phantomjs executable."
14
-
15
- attr_reader :uri
16
-
17
- def self.executable_path
18
- @executable_path ||= (
19
- path = PhantomJS.path
20
- path or raise Error::WebDriverError, MISSING_TEXT
21
- Platform.assert_executable path
22
-
23
- path
24
- )
25
- end
26
-
27
- def self.default_service(port = nil)
28
- new executable_path, port || PortProber.above(DEFAULT_PORT)
29
- end
30
-
31
- def initialize(executable_path, port)
32
- @uri = URI.parse "http://#{Platform.localhost}:#{port}"
33
- @executable = executable_path
34
- end
35
-
36
- def start(args = [])
37
- if @process && @process.alive?
38
- raise "already started: #{@uri.inspect} #{@executable.inspect}"
39
- end
40
-
41
- @process = create_process(args)
42
- @process.start
43
-
44
- socket_poller = SocketPoller.new Platform.localhost, @uri.port, START_TIMEOUT
45
-
46
- unless socket_poller.connected?
47
- raise Error::WebDriverError, "unable to connect to phantomjs @ #{@uri} after #{START_TIMEOUT} seconds"
48
- end
49
-
50
- Platform.exit_hook { stop } # make sure we don't leave the server running
51
- end
52
-
53
- def stop
54
- return if @process.nil? || @process.exited?
55
-
56
- Net::HTTP.start(uri.host, uri.port) do |http|
57
- http.open_timeout = STOP_TIMEOUT / 2
58
- http.read_timeout = STOP_TIMEOUT / 2
59
-
60
- http.get("/shutdown")
61
- end
62
-
63
- @process.poll_for_exit STOP_TIMEOUT
64
- rescue ChildProcess::TimeoutError
65
- # ok, force quit
66
- @process.stop STOP_TIMEOUT
67
-
68
- if Platform.jruby? && !$DEBUG
69
- @process.io.close rescue nil
70
- end
71
- end
72
-
73
- def create_process(args)
74
- server_command = [@executable, "--webdriver=#{@uri.port}", *args]
75
- process = ChildProcess.build(*server_command.compact)
76
-
77
- if $DEBUG == true
78
- process.io.inherit!
79
- elsif Platform.jruby?
80
- # apparently we need to read the output for phantomjs to work on jruby
81
- process.io.stdout = process.io.stderr = File.new(Platform.null_device, 'w')
82
- end
83
-
84
- process
85
- end
86
-
87
- end # Service
88
- end # PhantomJS
89
- end # WebDriver
90
- end # Service
@@ -1,22 +0,0 @@
1
- require 'net/http'
2
-
3
- require 'selenium/webdriver/phantomjs/service'
4
- require 'selenium/webdriver/phantomjs/bridge'
5
-
6
- module Selenium
7
- module WebDriver
8
-
9
- module PhantomJS
10
-
11
- def self.path=(path)
12
- Platform.assert_executable path
13
- @path = path
14
- end
15
-
16
- def self.path
17
- @path ||= Platform.find_binary("phantomjs")
18
- end
19
-
20
- end
21
- end
22
- end