selenium-webdriver 2.27.0.rc1 → 2.27.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: