selenium-webdriver 2.30.0 → 2.31.0
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.
- data/CHANGES +26 -1
- data/lib/selenium/webdriver/chrome/bridge.rb +2 -2
- data/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +22 -0
- data/lib/selenium/webdriver/common/platform.rb +22 -11
- data/lib/selenium/webdriver/common/proxy.rb +2 -0
- data/lib/selenium/webdriver/firefox/bridge.rb +5 -2
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/ie/bridge.rb +2 -2
- data/lib/selenium/webdriver/phantomjs/bridge.rb +7 -4
- data/lib/selenium/webdriver/phantomjs/service.rb +32 -12
- data/lib/selenium/webdriver/remote/bridge.rb +2 -1
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
2.31.0 (2013-03-02)
|
2
|
+
===================
|
3
|
+
|
4
|
+
Remote:
|
5
|
+
* Expose session_id on the remote driver when used directly (#5240).
|
6
|
+
Firefox:
|
7
|
+
* Native events in Firefox 19
|
8
|
+
Opera:
|
9
|
+
* Treat UNSPECIFIED proxy type as a nil proxy (#5081).
|
10
|
+
Other:
|
11
|
+
* Add ability to pass :desired_capabilities to all the Ruby drivers, not just for :remote.
|
12
|
+
Direct arguments take presendence. (#5078, see also https://github.com/SeleniumHQ/selenium/pull/8, https://github.com/SeleniumHQ/selenium/pull/11)
|
13
|
+
|
14
|
+
2.30.0 (2013-02-20)
|
15
|
+
===================
|
16
|
+
|
17
|
+
Firefox:
|
18
|
+
* Firefox 19 support (for synthesized events)
|
19
|
+
Remote:
|
20
|
+
* Pass along firefox_binary correctly (#5152)
|
21
|
+
Safari:
|
22
|
+
* Don't overwrite Driver#browser
|
23
|
+
Other
|
24
|
+
* Alert#text should raise on closed alert.
|
25
|
+
|
1
26
|
2.29.0 (2013-01-21)
|
2
27
|
===================
|
3
28
|
|
@@ -45,7 +70,7 @@ Firefox:
|
|
45
70
|
* FIXED: 4165: WebDriver fails on a machine with no IP address.
|
46
71
|
Safari:
|
47
72
|
* Fixed SafariDriver to allow calling .quit() consecutively without error.
|
48
|
-
* FIXED: 4676: Unable to fire javascript events into SVG's.
|
73
|
+
* FIXED: 4676: Unable to fire javascript events into SVG's.
|
49
74
|
* FIXED: 3969: SafariDriver should auto-dismiss alerts.
|
50
75
|
IE:
|
51
76
|
* FIXED: 4535: Hover still does not work perfectly in IE.
|
@@ -53,6 +53,7 @@ module Selenium
|
|
53
53
|
private
|
54
54
|
|
55
55
|
def create_capabilities(opts)
|
56
|
+
caps = opts.delete(:desired_capabilities) { Remote::Capabilities.chrome }
|
56
57
|
args = opts.delete(:args) || opts.delete(:switches)
|
57
58
|
native_events = opts.delete(:native_events)
|
58
59
|
verbose = opts.delete(:verbose)
|
@@ -65,7 +66,7 @@ module Selenium
|
|
65
66
|
raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
|
66
67
|
end
|
67
68
|
|
68
|
-
chrome_options = {}
|
69
|
+
chrome_options = caps['chromeOptions'] || {}
|
69
70
|
|
70
71
|
if args
|
71
72
|
unless args.kind_of? Array
|
@@ -89,7 +90,6 @@ module Selenium
|
|
89
90
|
chrome_options['detach'] = detach.nil? || !!detach
|
90
91
|
chrome_options['noWebsiteTestingDefaults'] = true if no_website_testing_defaults
|
91
92
|
|
92
|
-
caps = Remote::Capabilities.chrome
|
93
93
|
caps['chromeOptions'] = chrome_options
|
94
94
|
caps['proxy'] = proxy if proxy
|
95
95
|
|
@@ -31,6 +31,7 @@ require 'selenium/webdriver/common/driver_extensions/has_browser_connection'
|
|
31
31
|
require 'selenium/webdriver/common/driver_extensions/has_input_devices'
|
32
32
|
require 'selenium/webdriver/common/driver_extensions/has_web_storage'
|
33
33
|
require 'selenium/webdriver/common/driver_extensions/has_location'
|
34
|
+
require 'selenium/webdriver/common/driver_extensions/has_session_id'
|
34
35
|
require 'selenium/webdriver/common/driver_extensions/has_touch_screen'
|
35
36
|
require 'selenium/webdriver/common/driver_extensions/uploads_files'
|
36
37
|
require 'selenium/webdriver/common/keys'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
|
4
|
+
#
|
5
|
+
# @api private
|
6
|
+
#
|
7
|
+
|
8
|
+
module DriverExtensions
|
9
|
+
module HasSessionId
|
10
|
+
|
11
|
+
#
|
12
|
+
# @return [String] the session id
|
13
|
+
# @api public
|
14
|
+
#
|
15
|
+
|
16
|
+
def session_id
|
17
|
+
@bridge.session_id
|
18
|
+
end
|
19
|
+
end # HasSessionId
|
20
|
+
end # DriverExtensions
|
21
|
+
end # WebDriver
|
22
|
+
end # Selenium
|
@@ -88,6 +88,16 @@ module Selenium
|
|
88
88
|
!!(RUBY_PLATFORM =~ /cygwin/)
|
89
89
|
end
|
90
90
|
|
91
|
+
def null_device
|
92
|
+
@null_device ||= (
|
93
|
+
if defined?(File::NULL)
|
94
|
+
File::NULL
|
95
|
+
else
|
96
|
+
Platform.windows? ? 'NUL' : '/dev/null'
|
97
|
+
end
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
91
101
|
def wrap_in_quotes_if_necessary(str)
|
92
102
|
windows? && !cygwin? ? %{"#{str}"} : str
|
93
103
|
end
|
@@ -177,15 +187,16 @@ module Selenium
|
|
177
187
|
end # Selenium
|
178
188
|
|
179
189
|
if __FILE__ == $0
|
180
|
-
p :engine
|
181
|
-
:os
|
182
|
-
:ruby187?
|
183
|
-
:ruby19?
|
184
|
-
:jruby?
|
185
|
-
:windows?
|
186
|
-
:home
|
187
|
-
:bitsize
|
188
|
-
:localhost
|
189
|
-
:ip
|
190
|
-
:interfaces
|
190
|
+
p :engine => Selenium::WebDriver::Platform.engine,
|
191
|
+
:os => Selenium::WebDriver::Platform.os,
|
192
|
+
:ruby187? => Selenium::WebDriver::Platform.ruby187?,
|
193
|
+
:ruby19? => Selenium::WebDriver::Platform.ruby19?,
|
194
|
+
:jruby? => Selenium::WebDriver::Platform.jruby?,
|
195
|
+
:windows? => Selenium::WebDriver::Platform.windows?,
|
196
|
+
:home => Selenium::WebDriver::Platform.home,
|
197
|
+
:bitsize => Selenium::WebDriver::Platform.bitsize,
|
198
|
+
:localhost => Selenium::WebDriver::Platform.localhost,
|
199
|
+
:ip => Selenium::WebDriver::Platform.ip,
|
200
|
+
:interfaces => Selenium::WebDriver::Platform.interfaces,
|
201
|
+
:null_device => Selenium::WebDriver::Platform.null_device
|
191
202
|
end
|
@@ -11,7 +11,11 @@ module Selenium
|
|
11
11
|
http_client = opts.delete(:http_client)
|
12
12
|
proxy = opts.delete(:proxy)
|
13
13
|
|
14
|
-
|
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)
|
15
19
|
|
16
20
|
unless opts.empty?
|
17
21
|
raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
|
@@ -19,7 +23,6 @@ module Selenium
|
|
19
23
|
|
20
24
|
@launcher.launch
|
21
25
|
|
22
|
-
caps = Remote::Capabilities.firefox(:native_events => DEFAULT_ENABLE_NATIVE_EVENTS)
|
23
26
|
caps.proxy = proxy if proxy
|
24
27
|
|
25
28
|
remote_opts = {
|
Binary file
|
Binary file
|
Binary file
|
@@ -13,6 +13,7 @@ module Selenium
|
|
13
13
|
DEFAULT_TIMEOUT = 30
|
14
14
|
|
15
15
|
def initialize(opts = {})
|
16
|
+
caps = opts.delete(:desired_capabilities) { Remote::Capabilities.internet_explorer }
|
16
17
|
timeout = opts.delete(:timeout) { DEFAULT_TIMEOUT }
|
17
18
|
port = opts.delete(:port) { PortProber.above(DEFAULT_PORT) }
|
18
19
|
http_client = opts.delete(:http_client)
|
@@ -20,7 +21,7 @@ module Selenium
|
|
20
21
|
native_events = opts.delete(:native_events) != false
|
21
22
|
|
22
23
|
@server = Server.get
|
23
|
-
|
24
|
+
|
24
25
|
@server.log_level = opts.delete(:log_level) if opts[:log_level]
|
25
26
|
@server.log_file = opts.delete(:log_file) if opts[:log_file]
|
26
27
|
|
@@ -30,7 +31,6 @@ module Selenium
|
|
30
31
|
|
31
32
|
@port = @server.start Integer(port), timeout
|
32
33
|
|
33
|
-
caps = Remote::Capabilities.internet_explorer
|
34
34
|
if ignore_mode
|
35
35
|
caps['ignoreProtectedModeSettings'] = true
|
36
36
|
end
|
@@ -2,23 +2,26 @@ module Selenium
|
|
2
2
|
module WebDriver
|
3
3
|
module PhantomJS
|
4
4
|
|
5
|
+
|
5
6
|
# @api private
|
6
7
|
class Bridge < Remote::Bridge
|
7
8
|
|
8
9
|
def initialize(opts = {})
|
9
10
|
http_client = opts.delete(:http_client)
|
11
|
+
caps = opts.delete(:desired_capabilities) { Remote::Capabilities.phantomjs }
|
10
12
|
|
11
13
|
if opts.has_key?(:url)
|
12
14
|
url = opts.delete(:url)
|
13
15
|
else
|
14
|
-
|
15
|
-
|
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)
|
16
21
|
|
17
22
|
url = @service.uri
|
18
23
|
end
|
19
24
|
|
20
|
-
caps = Remote::Capabilities.phantomjs
|
21
|
-
|
22
25
|
remote_opts = {
|
23
26
|
:url => url,
|
24
27
|
:desired_capabilities => caps
|
@@ -24,24 +24,26 @@ module Selenium
|
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.default_service
|
28
|
-
new executable_path, PortProber.above(DEFAULT_PORT)
|
27
|
+
def self.default_service(port = nil)
|
28
|
+
new executable_path, port || PortProber.above(DEFAULT_PORT)
|
29
29
|
end
|
30
30
|
|
31
31
|
def initialize(executable_path, port)
|
32
|
-
@uri
|
33
|
-
|
34
|
-
|
35
|
-
@process = ChildProcess.build(*server_command)
|
36
|
-
@socket_poller = SocketPoller.new Platform.localhost, port, START_TIMEOUT
|
37
|
-
|
38
|
-
@process.io.inherit! if $DEBUG == true
|
32
|
+
@uri = URI.parse "http://#{Platform.localhost}:#{port}"
|
33
|
+
@executable = executable_path
|
39
34
|
end
|
40
35
|
|
41
|
-
def start
|
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
42
|
@process.start
|
43
43
|
|
44
|
-
|
44
|
+
socket_poller = SocketPoller.new Platform.localhost, @uri.port, START_TIMEOUT
|
45
|
+
|
46
|
+
unless socket_poller.connected?
|
45
47
|
raise Error::WebDriverError, "unable to connect to phantomjs @ #{@uri} after #{START_TIMEOUT} seconds"
|
46
48
|
end
|
47
49
|
|
@@ -62,9 +64,27 @@ module Selenium
|
|
62
64
|
rescue ChildProcess::TimeoutError
|
63
65
|
# ok, force quit
|
64
66
|
@process.stop STOP_TIMEOUT
|
67
|
+
|
68
|
+
if Platform.jruby? && !$DEBUG
|
69
|
+
@process.io.close rescue nil
|
70
|
+
end
|
65
71
|
end
|
66
|
-
end # Service
|
67
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
|
68
88
|
end # PhantomJS
|
69
89
|
end # WebDriver
|
70
90
|
end # Service
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.
|
5
|
+
version: 2.31.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jari Bakken
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2013-02
|
13
|
+
date: 2013-03-02 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- lib/selenium/webdriver/common/driver_extensions/has_browser_connection.rb
|
176
176
|
- lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb
|
177
177
|
- lib/selenium/webdriver/common/driver_extensions/has_location.rb
|
178
|
+
- lib/selenium/webdriver/common/driver_extensions/has_session_id.rb
|
178
179
|
- lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb
|
179
180
|
- lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb
|
180
181
|
- lib/selenium/webdriver/common/driver_extensions/rotatable.rb
|