selenium-webdriver 2.2.0 → 2.3.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 CHANGED
@@ -1,3 +1,13 @@
1
+ 2.3.0 (2011-08-01)
2
+ ==================
3
+
4
+ * Add Selenium::WebDriver::Chrome::Profile
5
+ * Better detection of clickable areas in Firefox.
6
+ * Merge of Google-contributed code into the underlying Atoms.
7
+ * IE click issue fixed (#1650)
8
+ * No longer raise in Element#inspect if the element is obsolete.
9
+
10
+
1
11
  2.2.0 (2011-07-26)
2
12
  ==================
3
13
 
@@ -2,6 +2,7 @@ require 'net/http'
2
2
  require 'uri'
3
3
  require 'cgi'
4
4
  require 'digest/md5'
5
+ require 'base64'
5
6
  require 'fileutils'
6
7
  require 'tmpdir'
7
8
 
@@ -2,7 +2,6 @@ require 'childprocess'
2
2
  require 'tmpdir'
3
3
  require 'fileutils'
4
4
  require 'date'
5
- require 'base64'
6
5
 
7
6
  have_lib = lambda { |lib|
8
7
  begin
@@ -2,6 +2,7 @@ require 'net/http'
2
2
 
3
3
  require 'selenium/webdriver/chrome/service'
4
4
  require 'selenium/webdriver/chrome/bridge'
5
+ require 'selenium/webdriver/chrome/profile'
5
6
 
6
7
  module Selenium
7
8
  module WebDriver
@@ -17,7 +18,7 @@ module Selenium
17
18
  end
18
19
 
19
20
  def self.path
20
- @path
21
+ @path ||= nil
21
22
  end
22
23
 
23
24
  end
@@ -10,6 +10,7 @@ module Selenium
10
10
  switches = opts.delete(:switches)
11
11
  native_events = opts.delete(:native_events)
12
12
  verbose = opts.delete(:verbose)
13
+ profile = opts.delete(:profile)
13
14
 
14
15
  unless opts.empty?
15
16
  raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
@@ -28,6 +29,7 @@ module Selenium
28
29
  caps.merge! 'chrome.binary' => Chrome.path if Chrome.path
29
30
  caps.merge! 'chrome.nativeEvents' => true if native_events
30
31
  caps.merge! 'chrome.verbose' => true if verbose
32
+ caps.merge! 'chrome.profile' => profile.as_json['zip'] if profile
31
33
 
32
34
  @service = Service.default_service
33
35
  @service.start
@@ -0,0 +1,66 @@
1
+ module Selenium
2
+ module WebDriver
3
+ module Chrome
4
+
5
+ #
6
+ # @private
7
+ #
8
+
9
+ class Profile
10
+ include ProfileHelper
11
+
12
+ def initialize(model = nil)
13
+ @model = verify_model(model)
14
+ end
15
+
16
+ #
17
+ # Set a preference in the profile.
18
+ #
19
+ # See http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/common/pref_names.cc&exact_package=chromium
20
+ #
21
+
22
+ def []=(key, value)
23
+ parts = key.split(".")
24
+ parts[0..-2].inject(prefs) { |pr, k| pr[k] ||= {} }[parts.last] = value
25
+ end
26
+
27
+ def [](key)
28
+ parts = key.split(".")
29
+ parts.inject(prefs) { |pr, k| pr.fetch(k) }
30
+ end
31
+
32
+ def layout_on_disk
33
+ dir = @model ? create_tmp_copy(@model) : Dir.mktmpdir("webdriver-chrome-profile")
34
+ FileReaper << dir
35
+
36
+ write_prefs_to dir
37
+
38
+ dir
39
+ end
40
+
41
+ private
42
+
43
+ def write_prefs_to(dir)
44
+ prefs_file = prefs_file_for(dir)
45
+
46
+ FileUtils.mkdir_p File.dirname(prefs_file)
47
+ File.open(prefs_file, "w") { |file| file << prefs.to_json }
48
+ end
49
+
50
+ def prefs
51
+ @prefs ||= read_model_prefs
52
+ end
53
+
54
+ def read_model_prefs
55
+ return {} unless @model
56
+ JSON.parse File.read(prefs_file_for(@model))
57
+ end
58
+
59
+ def prefs_file_for(dir)
60
+ File.join dir, 'Default', 'Preferences'
61
+ end
62
+ end # Profile
63
+
64
+ end # Chrome
65
+ end # WebDriver
66
+ end # Selenium
@@ -1,5 +1,6 @@
1
1
  require 'selenium/webdriver/common/core_ext/dir'
2
2
  require 'selenium/webdriver/common/core_ext/string'
3
+ require 'selenium/webdriver/common/core_ext/base64'
3
4
  require 'selenium/webdriver/common/error'
4
5
  require 'selenium/webdriver/common/platform'
5
6
  require 'selenium/webdriver/common/proxy'
@@ -22,5 +23,6 @@ require 'selenium/webdriver/common/driver_extensions/rotatable'
22
23
  require 'selenium/webdriver/common/driver_extensions/has_input_devices'
23
24
  require 'selenium/webdriver/common/keys'
24
25
  require 'selenium/webdriver/common/bridge_helper'
26
+ require 'selenium/webdriver/common/profile_helper'
25
27
  require 'selenium/webdriver/common/driver'
26
28
  require 'selenium/webdriver/common/element'
@@ -0,0 +1,9 @@
1
+ require 'base64'
2
+
3
+ module Base64
4
+
5
+ def self.strict_encode64(str)
6
+ encode64(str).gsub(/\n/, '')
7
+ end unless respond_to?(:strict_encode64) # added in 1.9
8
+
9
+ end
@@ -10,6 +10,14 @@ module Selenium
10
10
 
11
11
  ORIENTATIONS = [:landscape, :portrait]
12
12
 
13
+ #
14
+ # Change the screen orientation
15
+ #
16
+ # @param [:landscape, :portrait] Orientation
17
+ #
18
+ # @api public
19
+ #
20
+
13
21
  def rotate(orientation)
14
22
  unless ORIENTATIONS.include?(orientation)
15
23
  raise ArgumentError, "expected #{ORIENTATIONS.inspect}, got #{orientation.inspect}"
@@ -18,6 +26,14 @@ module Selenium
18
26
  bridge.setScreenOrientation(orientation.to_s.upcase)
19
27
  end
20
28
 
29
+ #
30
+ # Get the current screen orientation
31
+ #
32
+ # @return [:landscape, :portrait] orientation
33
+ #
34
+ # @api public
35
+ #
36
+
21
37
  def orientation
22
38
  bridge.getScreenOrientation.to_sym.downcase
23
39
  end
@@ -8,10 +8,24 @@ module Selenium
8
8
  module DriverExtensions
9
9
  module TakesScreenshot
10
10
 
11
+ #
12
+ # Save a PNG screenshot to the given path
13
+ #
14
+ # @api public
15
+ #
16
+
11
17
  def save_screenshot(png_path)
12
18
  File.open(png_path, 'wb') { |f| f << screenshot_as(:png) }
13
19
  end
14
20
 
21
+ #
22
+ # Return a PNG screenshot in the given format as a string
23
+ #
24
+ # @param [:base64, :png] format
25
+ # @return String screenshot
26
+ #
27
+ # @api public
28
+
15
29
  def screenshot_as(format)
16
30
  case format
17
31
  when :base64
@@ -14,7 +14,7 @@ module Selenium
14
14
  end
15
15
 
16
16
  def inspect
17
- '#<%s:0x%x id=%s tag_name=%s>' % [self.class, hash*2, @id.inspect, tag_name.inspect]
17
+ '#<%s:0x%x id=%s>' % [self.class, hash*2, @id.inspect]
18
18
  end
19
19
 
20
20
  def ==(other)
@@ -0,0 +1,67 @@
1
+ module Selenium
2
+ module WebDriver
3
+
4
+ #
5
+ # @private
6
+ #
7
+ # Common methods for Chrome::Profile and Firefox::Profile
8
+ # Includers must implement #layout_on_disk
9
+ #
10
+
11
+ module ProfileHelper
12
+
13
+ def self.included(base)
14
+ base.extend ClassMethods
15
+ end
16
+
17
+ def as_json(opts = nil)
18
+ {'zip' => Zipper.zip(layout_on_disk)}
19
+ end
20
+
21
+ def to_json(*args)
22
+ as_json.to_json(*args)
23
+ end
24
+
25
+ private
26
+
27
+ def create_tmp_copy(directory)
28
+ tmp_directory = Dir.mktmpdir("webdriver-rb-profilecopy")
29
+
30
+ # TODO: must be a better way..
31
+ FileUtils.rm_rf tmp_directory
32
+ FileUtils.mkdir_p File.dirname(tmp_directory), :mode => 0700
33
+ FileUtils.cp_r directory, tmp_directory
34
+
35
+ tmp_directory
36
+ end
37
+
38
+ def verify_model(model)
39
+ return unless model
40
+
41
+ raise Errno::ENOENT, model unless File.exist?(model)
42
+ raise Errno::ENOTDIR, model unless File.directory?(model)
43
+
44
+ model
45
+ end
46
+
47
+ module ClassMethods
48
+ def from_json(json)
49
+ data = JSON.parse(json).fetch('zip')
50
+
51
+ # can't use Tempfile here since it doesn't support File::BINARY mode on 1.8
52
+ # can't use Dir.mktmpdir(&blk) because of http://jira.codehaus.org/browse/JRUBY-4082
53
+ tmp_dir = Dir.mktmpdir
54
+ begin
55
+ zip_path = File.join(tmp_dir, "webdriver-profile-duplicate-#{json.hash}")
56
+ File.open(zip_path, "wb") { |zip_file| zip_file << Base64.decode64(data) }
57
+
58
+ new Zipper.unzip(zip_path)
59
+ ensure
60
+ FileUtils.rm_rf tmp_dir
61
+ end
62
+ end
63
+ end # ClassMethods
64
+
65
+ end # ProfileHelper
66
+ end # WebDriver
67
+ end # Selenium
@@ -41,7 +41,7 @@ module Selenium
41
41
  end
42
42
  }
43
43
 
44
- File.open(zip_path, "rb") { |io| Base64.encode64 io.read }
44
+ File.open(zip_path, "rb") { |io| Base64.strict_encode64 io.read }
45
45
  ensure
46
46
  FileUtils.rm_rf tmp_dir
47
47
  end
@@ -2,6 +2,7 @@ module Selenium
2
2
  module WebDriver
3
3
  module Firefox
4
4
  class Profile
5
+ include ProfileHelper
5
6
 
6
7
  WEBDRIVER_EXTENSION_PATH = File.expand_path("#{WebDriver.root}/selenium/webdriver/firefox/extension/webdriver.xpi")
7
8
  WEBDRIVER_PREFS = {
@@ -55,7 +56,6 @@ module Selenium
55
56
  @secure_ssl = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_certs]) != "true"
56
57
  @untrusted_issuer = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_issuer]) == "true"
57
58
  @load_no_focus_lib = model_prefs.delete(WEBDRIVER_PREFS[:load_no_focus_lib]) == "true" # not stored in profile atm, so will always be false.
58
-
59
59
  @additional_prefs = model_prefs
60
60
  end
61
61
 
@@ -74,29 +74,6 @@ module Selenium
74
74
  profile_dir
75
75
  end
76
76
 
77
- def as_json(opts = nil)
78
- {'zip' => Zipper.zip(layout_on_disk)}
79
- end
80
-
81
- def to_json(*args)
82
- as_json.to_json(*args)
83
- end
84
-
85
- def self.from_json(json)
86
- data = JSON.parse(json).fetch('zip')
87
-
88
- # can't use Tempfile here since it doesn't support File::BINARY mode on 1.8
89
- # can't use Dir.mktmpdir(&blk) because of http://jira.codehaus.org/browse/JRUBY-4082
90
- tmp_dir = Dir.mktmpdir
91
- begin
92
- zip_path = File.join(tmp_dir, "webdriver-profile-duplicate-#{json.hash}")
93
- File.open(zip_path, "wb") { |zip_file| zip_file << Base64.decode64(data) }
94
-
95
- new Zipper.unzip(zip_path)
96
- ensure
97
- FileUtils.rm_rf tmp_dir
98
- end
99
- end
100
77
 
101
78
  #
102
79
  # Set a preference for this particular profile.
@@ -213,15 +190,6 @@ module Selenium
213
190
  end
214
191
  end
215
192
 
216
- def verify_model(model)
217
- return unless model
218
-
219
- raise Errno::ENOENT, model unless File.exist?(model)
220
- raise Errno::ENOTDIR, model unless File.directory?(model)
221
-
222
- model
223
- end
224
-
225
193
  def read_model_prefs
226
194
  return {} unless @model
227
195
 
@@ -242,17 +210,6 @@ module Selenium
242
210
  File.basename(path, File.extname(path))
243
211
  end
244
212
 
245
- def create_tmp_copy(directory)
246
- tmp_directory = Dir.mktmpdir("webdriver-rb-profilecopy")
247
-
248
- # TODO: must be a better way..
249
- FileUtils.rm_rf tmp_directory
250
- FileUtils.mkdir_p File.dirname(tmp_directory), :mode => 0700
251
- FileUtils.cp_r directory, tmp_directory
252
-
253
- tmp_directory
254
- end
255
-
256
213
  def update_user_prefs_in(directory)
257
214
  path = File.join(directory, 'user.js')
258
215
  prefs = read_user_prefs(path)
@@ -3,24 +3,24 @@ module Selenium
3
3
  module Support
4
4
 
5
5
  class AbstractEventListener
6
- def before_navigate_to(url) end
7
- def after_navigate_to(url) end
8
- def before_navigate_back() end
9
- def after_navigate_back() end
10
- def before_navigate_forward() end
11
- def after_navigate_forward() end
12
- def before_find(by, what) end
13
- def after_find(by, what) end
14
- def before_click(element) end
15
- def after_click(element) end
16
- def before_change_value_of(element) end
17
- def after_change_value_of(element) end
18
- def before_execute_script(script) end
19
- def after_execute_script(script) end
20
- def before_quit() end
21
- def after_quit() end
22
- def before_close() end
23
- def after_close() end
6
+ def before_navigate_to(url, driver) end
7
+ def after_navigate_to(url, driver) end
8
+ def before_navigate_back(driver) end
9
+ def after_navigate_back(driver) end
10
+ def before_navigate_forward(driver) end
11
+ def after_navigate_forward(driver) end
12
+ def before_find(by, what, driver) end
13
+ def after_find(by, what, driver) end
14
+ def before_click(element, driver) end
15
+ def after_click(element, driver) end
16
+ def before_change_value_of(element, driver) end
17
+ def after_change_value_of(element, driver) end
18
+ def before_execute_script(script, driver) end
19
+ def after_execute_script(script, driver) end
20
+ def before_quit(driver) end
21
+ def after_quit(driver) end
22
+ def before_close(driver) end
23
+ def after_close(driver) end
24
24
  end
25
25
 
26
26
  end
@@ -18,43 +18,43 @@ module Selenium
18
18
  end
19
19
 
20
20
  def get(url)
21
- dispatch(:navigate_to, url) {
21
+ dispatch(:navigate_to, url, driver) {
22
22
  @delegate.get(url)
23
23
  }
24
24
  end
25
25
 
26
26
  def goForward
27
- dispatch(:navigate_forward) {
27
+ dispatch(:navigate_forward, driver) {
28
28
  @delegate.goForward
29
29
  }
30
30
  end
31
31
 
32
32
  def goBack
33
- dispatch(:navigate_back) {
33
+ dispatch(:navigate_back, driver) {
34
34
  @delegate.goBack
35
35
  }
36
36
  end
37
37
 
38
38
  def clickElement(ref)
39
- dispatch(:click, create_element(ref)) {
39
+ dispatch(:click, create_element(ref), driver) {
40
40
  @delegate.clickElement(ref)
41
41
  }
42
42
  end
43
43
 
44
44
  def clearElement(ref)
45
- dispatch(:change_value_of, create_element(ref)) {
45
+ dispatch(:change_value_of, create_element(ref), driver) {
46
46
  @delegate.clearElement(ref)
47
47
  }
48
48
  end
49
49
 
50
50
  def sendKeysToElement(ref, keys)
51
- dispatch(:change_value_of, create_element(ref)) {
51
+ dispatch(:change_value_of, create_element(ref), driver) {
52
52
  @delegate.sendKeysToElement(ref, keys)
53
53
  }
54
54
  end
55
55
 
56
56
  def find_element_by(how, what, parent = nil)
57
- e = dispatch(:find, how, what) {
57
+ e = dispatch(:find, how, what, driver) {
58
58
  @delegate.find_element_by how, what, parent
59
59
  }
60
60
 
@@ -62,7 +62,7 @@ module Selenium
62
62
  end
63
63
 
64
64
  def find_elements_by(how, what, parent = nil)
65
- es = dispatch(:find, how, what) {
65
+ es = dispatch(:find, how, what, driver) {
66
66
  @delegate.find_elements_by(how, what, parent)
67
67
  }
68
68
 
@@ -70,17 +70,17 @@ module Selenium
70
70
  end
71
71
 
72
72
  def executeScript(script, *args)
73
- dispatch(:execute_script, script) {
73
+ dispatch(:execute_script, script, driver) {
74
74
  @delegate.executeScript(script, *args)
75
75
  }
76
76
  end
77
77
 
78
78
  def quit
79
- dispatch(:quit) { @delegate.quit }
79
+ dispatch(:quit, driver) { @delegate.quit }
80
80
  end
81
81
 
82
82
  def close
83
- dispatch(:close) { @delegate.close }
83
+ dispatch(:close, driver) { @delegate.close }
84
84
  end
85
85
 
86
86
  private
@@ -90,6 +90,10 @@ module Selenium
90
90
  Element.new @delegate, ref
91
91
  end
92
92
 
93
+ def driver
94
+ @driver ||= Driver.new(self)
95
+ end
96
+
93
97
  def dispatch(name, *args, &blk)
94
98
  @listener.__send__("before_#{name}", *args)
95
99
  returned = yield
metadata CHANGED
@@ -1,137 +1,101 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: selenium-webdriver
3
- version: !ruby/object:Gem::Version
4
- hash: 7
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.3.0
5
5
  prerelease:
6
- segments:
7
- - 2
8
- - 2
9
- - 0
10
- version: 2.2.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jari Bakken
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-07-26 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-01 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: json_pure
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2170962760 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rubyzip
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2170962760
25
+ - !ruby/object:Gem::Dependency
26
+ name: rubyzip
27
+ requirement: &2170962280 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
46
33
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: childprocess
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2170962280
36
+ - !ruby/object:Gem::Dependency
37
+ name: childprocess
38
+ requirement: &2170948800 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 9
57
- segments:
58
- - 0
59
- - 1
60
- - 9
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
61
43
  version: 0.1.9
62
44
  type: :runtime
63
- version_requirements: *id003
64
- - !ruby/object:Gem::Dependency
65
- name: ffi
66
45
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2170948800
47
+ - !ruby/object:Gem::Dependency
48
+ name: ffi
49
+ requirement: &2170948140 !ruby/object:Gem::Requirement
68
50
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 25
73
- segments:
74
- - 1
75
- - 0
76
- - 7
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
77
54
  version: 1.0.7
78
55
  type: :runtime
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: rspec
82
56
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2170948140
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &2170947540 !ruby/object:Gem::Requirement
84
61
  none: false
85
- requirements:
62
+ requirements:
86
63
  - - ~>
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 2
91
- - 0
92
- version: "2.0"
64
+ - !ruby/object:Gem::Version
65
+ version: '2.0'
93
66
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- name: rack
97
67
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2170947540
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: &2170946740 !ruby/object:Gem::Requirement
99
72
  none: false
100
- requirements:
73
+ requirements:
101
74
  - - ~>
102
- - !ruby/object:Gem::Version
103
- hash: 15
104
- segments:
105
- - 1
106
- - 0
107
- version: "1.0"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.0'
108
77
  type: :development
109
- version_requirements: *id006
110
- - !ruby/object:Gem::Dependency
111
- name: ci_reporter
112
78
  prerelease: false
113
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *2170946740
80
+ - !ruby/object:Gem::Dependency
81
+ name: ci_reporter
82
+ requirement: &2170946220 !ruby/object:Gem::Requirement
114
83
  none: false
115
- requirements:
84
+ requirements:
116
85
  - - ~>
117
- - !ruby/object:Gem::Version
118
- hash: 11
119
- segments:
120
- - 1
121
- - 6
122
- - 2
86
+ - !ruby/object:Gem::Version
123
87
  version: 1.6.2
124
88
  type: :development
125
- version_requirements: *id007
126
- description: WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.
89
+ prerelease: false
90
+ version_requirements: *2170946220
91
+ description: WebDriver is a tool for writing automated tests of websites. It aims
92
+ to mimic the behaviour of a real user, and as such interacts with the HTML of the
93
+ application.
127
94
  email: jari.bakken@gmail.com
128
95
  executables: []
129
-
130
96
  extensions: []
131
-
132
97
  extra_rdoc_files: []
133
-
134
- files:
98
+ files:
135
99
  - lib/selenium/client/base.rb
136
100
  - lib/selenium/client/driver.rb
137
101
  - lib/selenium/client/errors.rb
@@ -149,11 +113,13 @@ files:
149
113
  - lib/selenium/webdriver/android/bridge.rb
150
114
  - lib/selenium/webdriver/android.rb
151
115
  - lib/selenium/webdriver/chrome/bridge.rb
116
+ - lib/selenium/webdriver/chrome/profile.rb
152
117
  - lib/selenium/webdriver/chrome/service.rb
153
118
  - lib/selenium/webdriver/chrome.rb
154
119
  - lib/selenium/webdriver/common/action_builder.rb
155
120
  - lib/selenium/webdriver/common/alert.rb
156
121
  - lib/selenium/webdriver/common/bridge_helper.rb
122
+ - lib/selenium/webdriver/common/core_ext/base64.rb
157
123
  - lib/selenium/webdriver/common/core_ext/dir.rb
158
124
  - lib/selenium/webdriver/common/core_ext/string.rb
159
125
  - lib/selenium/webdriver/common/driver.rb
@@ -170,6 +136,7 @@ files:
170
136
  - lib/selenium/webdriver/common/options.rb
171
137
  - lib/selenium/webdriver/common/platform.rb
172
138
  - lib/selenium/webdriver/common/port_prober.rb
139
+ - lib/selenium/webdriver/common/profile_helper.rb
173
140
  - lib/selenium/webdriver/common/proxy.rb
174
141
  - lib/selenium/webdriver/common/search_context.rb
175
142
  - lib/selenium/webdriver/common/socket_poller.rb
@@ -221,36 +188,26 @@ files:
221
188
  - README
222
189
  homepage: http://selenium.googlecode.com
223
190
  licenses: []
224
-
225
191
  post_install_message:
226
192
  rdoc_options: []
227
-
228
- require_paths:
193
+ require_paths:
229
194
  - lib
230
- required_ruby_version: !ruby/object:Gem::Requirement
195
+ required_ruby_version: !ruby/object:Gem::Requirement
231
196
  none: false
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- hash: 3
236
- segments:
237
- - 0
238
- version: "0"
239
- required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
202
  none: false
241
- requirements:
242
- - - ">="
243
- - !ruby/object:Gem::Version
244
- hash: 3
245
- segments:
246
- - 0
247
- version: "0"
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
248
207
  requirements: []
249
-
250
208
  rubyforge_project:
251
- rubygems_version: 1.8.5
209
+ rubygems_version: 1.8.6
252
210
  signing_key:
253
211
  specification_version: 3
254
212
  summary: The next generation developer focused tool for automated testing of webapps
255
213
  test_files: []
256
-