selenium-webdriver 2.27.0.rc1 → 2.27.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/lib/selenium/webdriver/common.rb +1 -0
- data/lib/selenium/webdriver/common/log_entry.rb +29 -0
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/phantomjs.rb +22 -0
- data/lib/selenium/webdriver/phantomjs/bridge.rb +56 -0
- data/lib/selenium/webdriver/phantomjs/service.rb +70 -0
- data/lib/selenium/webdriver/remote/bridge.rb +17 -0
- data/lib/selenium/webdriver/remote/commands.rb +7 -0
- metadata +9 -5
@@ -4,6 +4,7 @@ require 'selenium/webdriver/common/core_ext/base64'
|
|
4
4
|
require 'selenium/webdriver/common/error'
|
5
5
|
require 'selenium/webdriver/common/platform'
|
6
6
|
require 'selenium/webdriver/common/proxy'
|
7
|
+
require 'selenium/webdriver/common/log_entry'
|
7
8
|
require 'selenium/webdriver/common/file_reaper'
|
8
9
|
require 'selenium/webdriver/common/socket_poller'
|
9
10
|
require 'selenium/webdriver/common/port_prober'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
class LogEntry
|
4
|
+
attr_reader :level, :timestamp, :message
|
5
|
+
|
6
|
+
def initialize(level, timestamp, message)
|
7
|
+
@level = level
|
8
|
+
@timestamp = timestamp
|
9
|
+
@message = message
|
10
|
+
end
|
11
|
+
|
12
|
+
def as_json(opts = nil)
|
13
|
+
{
|
14
|
+
'level' => level,
|
15
|
+
'timestamp' => timestamp,
|
16
|
+
'message' => message
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"#{level} #{time}: #{message}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def time
|
25
|
+
Time.at timestamp / 1000
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
Binary file
|
@@ -0,0 +1,22 @@
|
|
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
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
module PhantomJS
|
4
|
+
|
5
|
+
# @api private
|
6
|
+
class Bridge < Remote::Bridge
|
7
|
+
|
8
|
+
def initialize(opts = {})
|
9
|
+
http_client = opts.delete(:http_client)
|
10
|
+
|
11
|
+
if opts.has_key?(:url)
|
12
|
+
url = opts.delete(:url)
|
13
|
+
else
|
14
|
+
@service = Service.default_service
|
15
|
+
@service.start
|
16
|
+
|
17
|
+
url = @service.uri
|
18
|
+
end
|
19
|
+
|
20
|
+
caps = Remote::Capabilities.phantomjs
|
21
|
+
|
22
|
+
remote_opts = {
|
23
|
+
:url => url,
|
24
|
+
:desired_capabilities => caps
|
25
|
+
}
|
26
|
+
|
27
|
+
remote_opts.merge!(:http_client => http_client) if http_client
|
28
|
+
|
29
|
+
super(remote_opts)
|
30
|
+
end
|
31
|
+
|
32
|
+
def browser
|
33
|
+
:phantomjs
|
34
|
+
end
|
35
|
+
|
36
|
+
def driver_extensions
|
37
|
+
[
|
38
|
+
DriverExtensions::TakesScreenshot,
|
39
|
+
DriverExtensions::HasInputDevices
|
40
|
+
]
|
41
|
+
end
|
42
|
+
|
43
|
+
def capabilities
|
44
|
+
@capabilities ||= Remote::Capabilities.phantomjs
|
45
|
+
end
|
46
|
+
|
47
|
+
def quit
|
48
|
+
super
|
49
|
+
ensure
|
50
|
+
@service.stop if @service
|
51
|
+
end
|
52
|
+
|
53
|
+
end # Bridge
|
54
|
+
end # PhantomJS
|
55
|
+
end # WebDriver
|
56
|
+
end # Selenium
|
@@ -0,0 +1,70 @@
|
|
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
|
28
|
+
new executable_path, PortProber.above(DEFAULT_PORT)
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(executable_path, port)
|
32
|
+
@uri = URI.parse "http://#{Platform.localhost}:#{port}"
|
33
|
+
server_command = [executable_path, "--webdriver=#{port}"]
|
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
|
39
|
+
end
|
40
|
+
|
41
|
+
def start
|
42
|
+
@process.start
|
43
|
+
|
44
|
+
unless @socket_poller.connected?
|
45
|
+
raise Error::WebDriverError, "unable to connect to phantomjs @ #{@uri} after #{START_TIMEOUT} seconds"
|
46
|
+
end
|
47
|
+
|
48
|
+
Platform.exit_hook { stop } # make sure we don't leave the server running
|
49
|
+
end
|
50
|
+
|
51
|
+
def stop
|
52
|
+
return if @process.nil? || @process.exited?
|
53
|
+
|
54
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
55
|
+
http.open_timeout = STOP_TIMEOUT / 2
|
56
|
+
http.read_timeout = STOP_TIMEOUT / 2
|
57
|
+
|
58
|
+
http.get("/shutdown")
|
59
|
+
end
|
60
|
+
|
61
|
+
@process.poll_for_exit STOP_TIMEOUT
|
62
|
+
rescue ChildProcess::TimeoutError
|
63
|
+
# ok, force quit
|
64
|
+
@process.stop STOP_TIMEOUT
|
65
|
+
end
|
66
|
+
end # Service
|
67
|
+
|
68
|
+
end # PhantomJS
|
69
|
+
end # WebDriver
|
70
|
+
end # Service
|
@@ -467,6 +467,23 @@ module Selenium
|
|
467
467
|
|
468
468
|
end
|
469
469
|
|
470
|
+
#
|
471
|
+
# logs
|
472
|
+
#
|
473
|
+
|
474
|
+
def getAvailableLogTypes
|
475
|
+
types = execute :getAvailableLogTypes
|
476
|
+
Array(types).map { |e| e.to_sym }
|
477
|
+
end
|
478
|
+
|
479
|
+
def getLog(type)
|
480
|
+
data = execute :getLog, {}, :type => type.to_s
|
481
|
+
|
482
|
+
Array(data).map do |l|
|
483
|
+
LogEntry.new l.fetch('level'), l.fetch('timestamp'), l.fetch('message')
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
470
487
|
#
|
471
488
|
# element properties
|
472
489
|
#
|
@@ -182,4 +182,11 @@ class Selenium::WebDriver::Remote::Bridge
|
|
182
182
|
command :touchMove, :post, "session/:session_id/touch/move"
|
183
183
|
command :touchScroll, :post, "session/:session_id/touch/scroll"
|
184
184
|
command :touchFlick, :post, "session/:session_id/touch/flick"
|
185
|
+
|
186
|
+
#
|
187
|
+
# logs
|
188
|
+
#
|
189
|
+
|
190
|
+
command :getAvailableLogTypes, :get, "session/:session_id/log/types"
|
191
|
+
command :getLog, :post, "session/:session_id/log"
|
185
192
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 2.27.0
|
4
|
+
prerelease:
|
5
|
+
version: 2.27.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: 2012-12-
|
13
|
+
date: 2012-12-06 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/selenium/webdriver/ie.rb
|
135
135
|
- lib/selenium/webdriver/iphone.rb
|
136
136
|
- lib/selenium/webdriver/opera.rb
|
137
|
+
- lib/selenium/webdriver/phantomjs.rb
|
137
138
|
- lib/selenium/webdriver/remote.rb
|
138
139
|
- lib/selenium/webdriver/safari.rb
|
139
140
|
- lib/selenium/webdriver/support.rb
|
@@ -151,6 +152,7 @@ files:
|
|
151
152
|
- lib/selenium/webdriver/common/json_helper.rb
|
152
153
|
- lib/selenium/webdriver/common/keyboard.rb
|
153
154
|
- lib/selenium/webdriver/common/keys.rb
|
155
|
+
- lib/selenium/webdriver/common/log_entry.rb
|
154
156
|
- lib/selenium/webdriver/common/mouse.rb
|
155
157
|
- lib/selenium/webdriver/common/navigation.rb
|
156
158
|
- lib/selenium/webdriver/common/options.rb
|
@@ -199,6 +201,8 @@ files:
|
|
199
201
|
- lib/selenium/webdriver/iphone/bridge.rb
|
200
202
|
- lib/selenium/webdriver/opera/bridge.rb
|
201
203
|
- lib/selenium/webdriver/opera/service.rb
|
204
|
+
- lib/selenium/webdriver/phantomjs/bridge.rb
|
205
|
+
- lib/selenium/webdriver/phantomjs/service.rb
|
202
206
|
- lib/selenium/webdriver/remote/bridge.rb
|
203
207
|
- lib/selenium/webdriver/remote/capabilities.rb
|
204
208
|
- lib/selenium/webdriver/remote/commands.rb
|
@@ -237,9 +241,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
237
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
242
|
none: false
|
239
243
|
requirements:
|
240
|
-
- - "
|
244
|
+
- - ">="
|
241
245
|
- !ruby/object:Gem::Version
|
242
|
-
version:
|
246
|
+
version: "0"
|
243
247
|
requirements: []
|
244
248
|
|
245
249
|
rubyforge_project:
|