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.
@@ -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
@@ -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: 7
5
- version: 2.27.0.rc1
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-02 00:00:00 +01:00
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: 1.3.1
246
+ version: "0"
243
247
  requirements: []
244
248
 
245
249
  rubyforge_project: