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 +10 -0
- data/lib/selenium/client.rb +1 -0
- data/lib/selenium/webdriver.rb +0 -1
- data/lib/selenium/webdriver/chrome.rb +2 -1
- data/lib/selenium/webdriver/chrome/bridge.rb +2 -0
- data/lib/selenium/webdriver/chrome/profile.rb +66 -0
- data/lib/selenium/webdriver/common.rb +2 -0
- data/lib/selenium/webdriver/common/core_ext/base64.rb +9 -0
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +16 -0
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +14 -0
- data/lib/selenium/webdriver/common/element.rb +1 -1
- data/lib/selenium/webdriver/common/profile_helper.rb +67 -0
- data/lib/selenium/webdriver/common/zipper.rb +1 -1
- 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/firefox/profile.rb +1 -44
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +18 -18
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +15 -11
- metadata +75 -118
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
|
|
data/lib/selenium/client.rb
CHANGED
data/lib/selenium/webdriver.rb
CHANGED
@@ -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'
|
@@ -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
|
@@ -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
|
Binary file
|
File without changes
|
Binary file
|
@@ -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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
126
|
-
|
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
|
-
|
236
|
-
|
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
|
-
|
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.
|
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
|
-
|