selenium-webdriver 2.12.2 → 2.13.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 +7 -1
- data/lib/selenium/webdriver.rb +1 -1
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/support/select.rb +302 -0
- metadata +237 -193
data/CHANGES
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
2.13.0 (2011-11-18)
|
2
|
+
===================
|
3
|
+
|
4
|
+
* Firefox:
|
5
|
+
* Recovering from null window references in the Firefox driver (#1438)
|
6
|
+
|
1
7
|
2.12.2 (2011-11-13)
|
2
8
|
===================
|
3
9
|
|
4
10
|
* Firefox
|
5
|
-
* Fix issue where Firefox 8 would throw permission errors after document.domain was modified.
|
11
|
+
* Fix issue where Firefox 8 would throw permission errors after document.domain was modified (#2863).
|
6
12
|
* Force window to the foreground on launch (see https://bugzilla.mozilla.org/show_bug.cgi?id=566671)
|
7
13
|
|
8
14
|
2.12.1 (2011-11-11)
|
data/lib/selenium/webdriver.rb
CHANGED
Binary file
|
@@ -0,0 +1,302 @@
|
|
1
|
+
module Selenium
|
2
|
+
module WebDriver
|
3
|
+
module Support
|
4
|
+
class Select
|
5
|
+
|
6
|
+
def initialize(element)
|
7
|
+
tag_name = element.tag_name
|
8
|
+
|
9
|
+
unless tag_name.downcase == "select"
|
10
|
+
raise ArgumentError, "unexpected tag name #{tag_name.inspect}"
|
11
|
+
end
|
12
|
+
|
13
|
+
@element = element
|
14
|
+
@multi = ![nil, "false"].include?(element.attribute(:multiple))
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Does this select element support selecting multiple options?
|
19
|
+
#
|
20
|
+
|
21
|
+
def multiple?
|
22
|
+
@multi
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# Get all options for this select element
|
27
|
+
#
|
28
|
+
|
29
|
+
def options
|
30
|
+
@element.find_elements :tag_name => "option"
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Get all selected options for this select element
|
35
|
+
#
|
36
|
+
|
37
|
+
def selected_options
|
38
|
+
options.select { |e| e.selected? }
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Get the first selected option in this select element
|
43
|
+
#
|
44
|
+
|
45
|
+
def first_selected_option
|
46
|
+
option = options.find { |e| e.selected? }
|
47
|
+
option or raise Error::NoSuchElementError, 'no options are selected'
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Select options by visible text, index or value.
|
52
|
+
#
|
53
|
+
|
54
|
+
def select(how, what)
|
55
|
+
case how
|
56
|
+
when :text, :index, :value
|
57
|
+
raise NotImplementedError
|
58
|
+
else
|
59
|
+
raise ArgumentError, "can't select options by #{how.inspect}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# /**
|
64
|
+
# * Select all options that display text matching the argument. That is, when given "Bar" this
|
65
|
+
# * would select an option like:
|
66
|
+
# *
|
67
|
+
# * <option value="foo">Bar</option>
|
68
|
+
# *
|
69
|
+
# * @param text The visible text to match against
|
70
|
+
# */
|
71
|
+
# public void selectByVisibleText(String text) {
|
72
|
+
# // try to find the option via XPATH ...
|
73
|
+
# List<WebElement> options =
|
74
|
+
# element.findElements(By.xpath(".//option[normalize-space(.) = " + escapeQuotes(text) + "]"));
|
75
|
+
#
|
76
|
+
# boolean matched = false;
|
77
|
+
# for (WebElement option : options) {
|
78
|
+
# setSelected(option);
|
79
|
+
# if (!isMultiple()) {
|
80
|
+
# return;
|
81
|
+
# }
|
82
|
+
# matched = true;
|
83
|
+
# }
|
84
|
+
#
|
85
|
+
# if (options.isEmpty() && text.contains(" ")) {
|
86
|
+
# String subStringWithoutSpace = getLongestSubstringWithoutSpace(text);
|
87
|
+
# List<WebElement> candidates;
|
88
|
+
# if ("".equals(subStringWithoutSpace)) {
|
89
|
+
# // hmm, text is either empty or contains only spaces - get all options ...
|
90
|
+
# candidates = element.findElements(By.tagName("option"));
|
91
|
+
# } else {
|
92
|
+
# // get candidates via XPATH ...
|
93
|
+
# candidates =
|
94
|
+
# element.findElements(By.xpath(".//option[contains(., " +
|
95
|
+
# escapeQuotes(subStringWithoutSpace) + ")]"));
|
96
|
+
# }
|
97
|
+
# for (WebElement option : candidates) {
|
98
|
+
# if (text.equals(option.getText())) {
|
99
|
+
# setSelected(option);
|
100
|
+
# if (!isMultiple()) {
|
101
|
+
# return;
|
102
|
+
# }
|
103
|
+
# matched = true;
|
104
|
+
# }
|
105
|
+
# }
|
106
|
+
# }
|
107
|
+
#
|
108
|
+
# if (!matched) {
|
109
|
+
# throw new NoSuchElementException("Cannot locate element with text: " + text);
|
110
|
+
# }
|
111
|
+
# }
|
112
|
+
#
|
113
|
+
# private String getLongestSubstringWithoutSpace(String s) {
|
114
|
+
# String result = "";
|
115
|
+
# StringTokenizer st = new StringTokenizer(s, " ");
|
116
|
+
# while (st.hasMoreTokens()) {
|
117
|
+
# String t = st.nextToken();
|
118
|
+
# if (t.length() > result.length()) {
|
119
|
+
# result = t;
|
120
|
+
# }
|
121
|
+
# }
|
122
|
+
# return result;
|
123
|
+
# }
|
124
|
+
#
|
125
|
+
# /**
|
126
|
+
# * Select the option at the given index. This is done by examing the "index" attribute of an
|
127
|
+
# * element, and not merely by counting.
|
128
|
+
# *
|
129
|
+
# * @param index The option at this index will be selected
|
130
|
+
# */
|
131
|
+
# public void selectByIndex(int index) {
|
132
|
+
# String match = String.valueOf(index);
|
133
|
+
#
|
134
|
+
# boolean matched = false;
|
135
|
+
# for (WebElement option : getOptions()) {
|
136
|
+
# if (match.equals(option.getAttribute("index"))) {
|
137
|
+
# setSelected(option);
|
138
|
+
# if (!isMultiple()) {
|
139
|
+
# return;
|
140
|
+
# }
|
141
|
+
# matched = true;
|
142
|
+
# }
|
143
|
+
# }
|
144
|
+
# if (!matched) {
|
145
|
+
# throw new NoSuchElementException("Cannot locate option with index: " + index);
|
146
|
+
# }
|
147
|
+
# }
|
148
|
+
#
|
149
|
+
# /**
|
150
|
+
# * Select all options that have a value matching the argument. That is, when given "foo" this
|
151
|
+
# * would select an option like:
|
152
|
+
# *
|
153
|
+
# * <option value="foo">Bar</option>
|
154
|
+
# *
|
155
|
+
# * @param value The value to match against
|
156
|
+
# */
|
157
|
+
# public void selectByValue(String value) {
|
158
|
+
# StringBuilder builder = new StringBuilder(".//option[@value = ");
|
159
|
+
# builder.append(escapeQuotes(value));
|
160
|
+
# builder.append("]");
|
161
|
+
# List<WebElement> options = element.findElements(By.xpath(builder.toString()));
|
162
|
+
#
|
163
|
+
# boolean matched = false;
|
164
|
+
# for (WebElement option : options) {
|
165
|
+
# setSelected(option);
|
166
|
+
# if (!isMultiple()) {
|
167
|
+
# return;
|
168
|
+
# }
|
169
|
+
# matched = true;
|
170
|
+
# }
|
171
|
+
#
|
172
|
+
# if (!matched) {
|
173
|
+
# throw new NoSuchElementException("Cannot locate option with value: " + value);
|
174
|
+
# }
|
175
|
+
# }
|
176
|
+
#
|
177
|
+
|
178
|
+
#
|
179
|
+
# Clear all selected entries. Only valid if the element supports multiple selections.
|
180
|
+
#
|
181
|
+
|
182
|
+
def deselect_all
|
183
|
+
unless multiple?
|
184
|
+
raise Error::UnsupportedOperationError, 'you may only deselect all options of a multi-select'
|
185
|
+
end
|
186
|
+
|
187
|
+
options.each { |e| deselect_option e }
|
188
|
+
end
|
189
|
+
|
190
|
+
#
|
191
|
+
# Deselect options by visible text, index or value.
|
192
|
+
#
|
193
|
+
|
194
|
+
def deselect(how, what)
|
195
|
+
case how
|
196
|
+
when :value, :index, :text
|
197
|
+
raise NotImplementedError
|
198
|
+
else
|
199
|
+
raise ArgumentError, "can't deselect options by #{how.inspect}"
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
|
204
|
+
#
|
205
|
+
# /**
|
206
|
+
# * Deselect all options that have a value matching the argument. That is, when given "foo" this
|
207
|
+
# * would deselect an option like:
|
208
|
+
# *
|
209
|
+
# * <option value="foo">Bar</option>
|
210
|
+
# *
|
211
|
+
# * @param value The value to match against
|
212
|
+
# */
|
213
|
+
# public void deselectByValue(String value) {
|
214
|
+
# StringBuilder builder = new StringBuilder(".//option[@value = ");
|
215
|
+
# builder.append(escapeQuotes(value));
|
216
|
+
# builder.append("]");
|
217
|
+
# List<WebElement> options = element.findElements(By.xpath(builder.toString()));
|
218
|
+
# for (WebElement option : options) {
|
219
|
+
# if (option.isSelected()) {
|
220
|
+
# option.click();
|
221
|
+
# }
|
222
|
+
# }
|
223
|
+
# }
|
224
|
+
#
|
225
|
+
# /**
|
226
|
+
# * Deselect the option at the given index. This is done by examing the "index" attribute of an
|
227
|
+
# * element, and not merely by counting.
|
228
|
+
# *
|
229
|
+
# * @param index The option at this index will be deselected
|
230
|
+
# */
|
231
|
+
# public void deselectByIndex(int index) {
|
232
|
+
# String match = String.valueOf(index);
|
233
|
+
#
|
234
|
+
# for (WebElement option : getOptions()) {
|
235
|
+
# if (match.equals(option.getAttribute("index")) && option.isSelected()) {
|
236
|
+
# option.click();
|
237
|
+
# }
|
238
|
+
# }
|
239
|
+
# }
|
240
|
+
#
|
241
|
+
# /**
|
242
|
+
# * Deselect all options that display text matching the argument. That is, when given "Bar" this
|
243
|
+
# * would deselect an option like:
|
244
|
+
# *
|
245
|
+
# * <option value="foo">Bar</option>
|
246
|
+
# *
|
247
|
+
# * @param text The visible text to match against
|
248
|
+
# */
|
249
|
+
# public void deselectByVisibleText(String text) {
|
250
|
+
# StringBuilder builder = new StringBuilder(".//option[normalize-space(.) = ");
|
251
|
+
# builder.append(escapeQuotes(text));
|
252
|
+
# builder.append("]");
|
253
|
+
# List<WebElement> options = element.findElements(By.xpath(builder.toString()));
|
254
|
+
# for (WebElement option : options) {
|
255
|
+
# if (option.isSelected()) {
|
256
|
+
# option.click();
|
257
|
+
# }
|
258
|
+
# }
|
259
|
+
# }
|
260
|
+
#
|
261
|
+
# protected String escapeQuotes(String toEscape) {
|
262
|
+
# // Convert strings with both quotes and ticks into: foo'"bar -> concat("foo'", '"', "bar")
|
263
|
+
# if (toEscape.indexOf("\"") > -1 && toEscape.indexOf("'") > -1) {
|
264
|
+
# boolean quoteIsLast = false;
|
265
|
+
# if (toEscape.indexOf("\"") == toEscape.length() - 1) {
|
266
|
+
# quoteIsLast = true;
|
267
|
+
# }
|
268
|
+
# String[] substrings = toEscape.split("\"");
|
269
|
+
#
|
270
|
+
# StringBuilder quoted = new StringBuilder("concat(");
|
271
|
+
# for (int i = 0; i < substrings.length; i++) {
|
272
|
+
# quoted.append("\"").append(substrings[i]).append("\"");
|
273
|
+
# quoted
|
274
|
+
# .append(((i == substrings.length - 1) ? (quoteIsLast ? ", '\"')" : ")") : ", '\"', "));
|
275
|
+
# }
|
276
|
+
# return quoted.toString();
|
277
|
+
# }
|
278
|
+
#
|
279
|
+
# // Escape string with just a quote into being single quoted: f"oo -> 'f"oo'
|
280
|
+
# if (toEscape.indexOf("\"") > -1) {
|
281
|
+
# return String.format("'%s'", toEscape);
|
282
|
+
# }
|
283
|
+
#
|
284
|
+
# // Otherwise return the quoted string
|
285
|
+
# return String.format("\"%s\"", toEscape);
|
286
|
+
# }
|
287
|
+
#
|
288
|
+
|
289
|
+
private
|
290
|
+
|
291
|
+
def select_option(opt)
|
292
|
+
opt.click unless opt.selected?
|
293
|
+
end
|
294
|
+
|
295
|
+
def deselect_option(opt)
|
296
|
+
opt.click if opt.selected?
|
297
|
+
end
|
298
|
+
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
metadata
CHANGED
@@ -1,106 +1,144 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selenium-webdriver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 59
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 13
|
9
|
+
- 0
|
10
|
+
version: 2.13.0
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
|
-
|
13
|
+
- Jari Bakken
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-11-
|
14
|
-
default_executable:
|
18
|
+
date: 2011-11-18 00:00:00 Z
|
15
19
|
dependencies:
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: json_pure
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rubyzip
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: childprocess
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 21
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
- 2
|
60
|
+
- 1
|
61
|
+
version: 0.2.1
|
62
|
+
type: :runtime
|
63
|
+
version_requirements: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: ffi
|
66
|
+
prerelease: false
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ~>
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 5
|
73
|
+
segments:
|
74
|
+
- 1
|
75
|
+
- 0
|
76
|
+
- 9
|
77
|
+
version: 1.0.9
|
78
|
+
type: :runtime
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rspec
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 2
|
91
|
+
- 0
|
92
|
+
version: "2.0"
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id005
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rack
|
97
|
+
prerelease: false
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
hash: 15
|
104
|
+
segments:
|
105
|
+
- 1
|
106
|
+
- 0
|
107
|
+
version: "1.0"
|
108
|
+
type: :development
|
109
|
+
version_requirements: *id006
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: ci_reporter
|
112
|
+
prerelease: false
|
113
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 11
|
119
|
+
segments:
|
120
|
+
- 1
|
121
|
+
- 6
|
122
|
+
- 2
|
123
|
+
version: 1.6.2
|
124
|
+
type: :development
|
125
|
+
version_requirements: *id007
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: webmock
|
128
|
+
prerelease: false
|
129
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ~>
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 1
|
135
|
+
segments:
|
136
|
+
- 1
|
137
|
+
- 7
|
138
|
+
- 5
|
139
|
+
version: 1.7.5
|
140
|
+
type: :development
|
141
|
+
version_requirements: *id008
|
104
142
|
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.
|
105
143
|
email: jari.bakken@gmail.com
|
106
144
|
executables: []
|
@@ -110,99 +148,99 @@ extensions: []
|
|
110
148
|
extra_rdoc_files: []
|
111
149
|
|
112
150
|
files:
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
151
|
+
- lib/selenium/client/base.rb
|
152
|
+
- lib/selenium/client/driver.rb
|
153
|
+
- lib/selenium/client/errors.rb
|
154
|
+
- lib/selenium/client/extensions.rb
|
155
|
+
- lib/selenium/client/idiomatic.rb
|
156
|
+
- lib/selenium/client/javascript_expression_builder.rb
|
157
|
+
- lib/selenium/client/javascript_frameworks/jquery.rb
|
158
|
+
- lib/selenium/client/javascript_frameworks/prototype.rb
|
159
|
+
- lib/selenium/client/legacy_driver.rb
|
160
|
+
- lib/selenium/client/protocol.rb
|
161
|
+
- lib/selenium/client/selenium_helper.rb
|
162
|
+
- lib/selenium/client.rb
|
163
|
+
- lib/selenium/rake/server_task.rb
|
164
|
+
- lib/selenium/server.rb
|
165
|
+
- lib/selenium/webdriver/android/bridge.rb
|
166
|
+
- lib/selenium/webdriver/android.rb
|
167
|
+
- lib/selenium/webdriver/chrome/bridge.rb
|
168
|
+
- lib/selenium/webdriver/chrome/profile.rb
|
169
|
+
- lib/selenium/webdriver/chrome/service.rb
|
170
|
+
- lib/selenium/webdriver/chrome.rb
|
171
|
+
- lib/selenium/webdriver/common/action_builder.rb
|
172
|
+
- lib/selenium/webdriver/common/alert.rb
|
173
|
+
- lib/selenium/webdriver/common/bridge_helper.rb
|
174
|
+
- lib/selenium/webdriver/common/core_ext/base64.rb
|
175
|
+
- lib/selenium/webdriver/common/core_ext/dir.rb
|
176
|
+
- lib/selenium/webdriver/common/core_ext/string.rb
|
177
|
+
- lib/selenium/webdriver/common/driver.rb
|
178
|
+
- lib/selenium/webdriver/common/driver_extensions/has_input_devices.rb
|
179
|
+
- lib/selenium/webdriver/common/driver_extensions/rotatable.rb
|
180
|
+
- lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb
|
181
|
+
- lib/selenium/webdriver/common/driver_extensions/uploads_files.rb
|
182
|
+
- lib/selenium/webdriver/common/element.rb
|
183
|
+
- lib/selenium/webdriver/common/error.rb
|
184
|
+
- lib/selenium/webdriver/common/file_reaper.rb
|
185
|
+
- lib/selenium/webdriver/common/keyboard.rb
|
186
|
+
- lib/selenium/webdriver/common/keys.rb
|
187
|
+
- lib/selenium/webdriver/common/mouse.rb
|
188
|
+
- lib/selenium/webdriver/common/navigation.rb
|
189
|
+
- lib/selenium/webdriver/common/options.rb
|
190
|
+
- lib/selenium/webdriver/common/platform.rb
|
191
|
+
- lib/selenium/webdriver/common/port_prober.rb
|
192
|
+
- lib/selenium/webdriver/common/profile_helper.rb
|
193
|
+
- lib/selenium/webdriver/common/proxy.rb
|
194
|
+
- lib/selenium/webdriver/common/search_context.rb
|
195
|
+
- lib/selenium/webdriver/common/socket_poller.rb
|
196
|
+
- lib/selenium/webdriver/common/target_locator.rb
|
197
|
+
- lib/selenium/webdriver/common/timeouts.rb
|
198
|
+
- lib/selenium/webdriver/common/wait.rb
|
199
|
+
- lib/selenium/webdriver/common/window.rb
|
200
|
+
- lib/selenium/webdriver/common/zipper.rb
|
201
|
+
- lib/selenium/webdriver/common.rb
|
202
|
+
- lib/selenium/webdriver/firefox/binary.rb
|
203
|
+
- lib/selenium/webdriver/firefox/bridge.rb
|
204
|
+
- lib/selenium/webdriver/firefox/extension/webdriver.xpi
|
205
|
+
- lib/selenium/webdriver/firefox/extension.rb
|
206
|
+
- lib/selenium/webdriver/firefox/launcher.rb
|
207
|
+
- lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so
|
208
|
+
- lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
|
209
|
+
- lib/selenium/webdriver/firefox/profile.rb
|
210
|
+
- lib/selenium/webdriver/firefox/profiles_ini.rb
|
211
|
+
- lib/selenium/webdriver/firefox/socket_lock.rb
|
212
|
+
- lib/selenium/webdriver/firefox/util.rb
|
213
|
+
- lib/selenium/webdriver/firefox.rb
|
214
|
+
- lib/selenium/webdriver/ie/bridge.rb
|
215
|
+
- lib/selenium/webdriver/ie/native/win32/IEDriver.dll
|
216
|
+
- lib/selenium/webdriver/ie/native/x64/IEDriver.dll
|
217
|
+
- lib/selenium/webdriver/ie/server.rb
|
218
|
+
- lib/selenium/webdriver/ie.rb
|
219
|
+
- lib/selenium/webdriver/iphone/bridge.rb
|
220
|
+
- lib/selenium/webdriver/iphone.rb
|
221
|
+
- lib/selenium/webdriver/opera/bridge.rb
|
222
|
+
- lib/selenium/webdriver/opera/service.rb
|
223
|
+
- lib/selenium/webdriver/opera.rb
|
224
|
+
- lib/selenium/webdriver/remote/bridge.rb
|
225
|
+
- lib/selenium/webdriver/remote/capabilities.rb
|
226
|
+
- lib/selenium/webdriver/remote/commands.rb
|
227
|
+
- lib/selenium/webdriver/remote/http/common.rb
|
228
|
+
- lib/selenium/webdriver/remote/http/curb.rb
|
229
|
+
- lib/selenium/webdriver/remote/http/default.rb
|
230
|
+
- lib/selenium/webdriver/remote/http/persistent.rb
|
231
|
+
- lib/selenium/webdriver/remote/response.rb
|
232
|
+
- lib/selenium/webdriver/remote/server_error.rb
|
233
|
+
- lib/selenium/webdriver/remote.rb
|
234
|
+
- lib/selenium/webdriver/support/abstract_event_listener.rb
|
235
|
+
- lib/selenium/webdriver/support/block_event_listener.rb
|
236
|
+
- lib/selenium/webdriver/support/event_firing_bridge.rb
|
237
|
+
- lib/selenium/webdriver/support/select.rb
|
238
|
+
- lib/selenium/webdriver/support.rb
|
239
|
+
- lib/selenium/webdriver.rb
|
240
|
+
- lib/selenium-client.rb
|
241
|
+
- lib/selenium-webdriver.rb
|
242
|
+
- CHANGES
|
243
|
+
- README
|
206
244
|
homepage: http://selenium.googlecode.com
|
207
245
|
licenses: []
|
208
246
|
|
@@ -210,23 +248,29 @@ post_install_message:
|
|
210
248
|
rdoc_options: []
|
211
249
|
|
212
250
|
require_paths:
|
213
|
-
|
251
|
+
- lib
|
214
252
|
required_ruby_version: !ruby/object:Gem::Requirement
|
215
253
|
none: false
|
216
254
|
requirements:
|
217
|
-
|
218
|
-
|
219
|
-
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
hash: 3
|
258
|
+
segments:
|
259
|
+
- 0
|
260
|
+
version: "0"
|
220
261
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
262
|
none: false
|
222
263
|
requirements:
|
223
|
-
|
224
|
-
|
225
|
-
|
264
|
+
- - ">="
|
265
|
+
- !ruby/object:Gem::Version
|
266
|
+
hash: 3
|
267
|
+
segments:
|
268
|
+
- 0
|
269
|
+
version: "0"
|
226
270
|
requirements: []
|
227
271
|
|
228
272
|
rubyforge_project:
|
229
|
-
rubygems_version: 1.
|
273
|
+
rubygems_version: 1.8.10
|
230
274
|
signing_key:
|
231
275
|
specification_version: 3
|
232
276
|
summary: The next generation developer focused tool for automated testing of webapps
|