selenium-webdriver 0.0.17 → 0.0.18
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/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
- data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
- data/chrome/src/extension/background.js +64 -48
- data/chrome/src/extension/content_script.js +253 -132
- data/chrome/src/extension/manifest-nonwin.json +1 -1
- data/chrome/src/extension/manifest-win.json +1 -1
- data/chrome/src/extension/utils.js +8 -8
- data/chrome/src/rb/lib/selenium/webdriver/chrome.rb +9 -0
- data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +38 -280
- data/chrome/src/rb/lib/selenium/webdriver/chrome/command_executor.rb +119 -117
- data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +36 -26
- data/common/src/js/abstractcommandprocessor.js +9 -11
- data/common/src/js/command.js +159 -83
- data/common/src/js/core/RemoteRunner.html +2 -2
- data/common/src/js/core/TestRunner-splash.html +3 -3
- data/common/src/js/core/TestRunner.html +5 -17
- data/common/src/js/core/scripts/htmlutils.js +4208 -2506
- data/common/src/js/core/scripts/selenium-api.js +2 -2
- data/common/src/js/core/scripts/selenium-browserbot.js +66 -58
- data/common/src/js/core/scripts/selenium-version.js +1 -1
- data/common/src/js/localcommandprocessor.js +5 -19
- data/common/src/js/testcase.js +2 -0
- data/common/src/js/webdriver.js +63 -93
- data/common/src/js/webelement.js +40 -42
- data/common/src/rb/lib/selenium/webdriver.rb +23 -14
- data/common/src/rb/lib/selenium/webdriver/bridge_helper.rb +8 -35
- data/common/src/rb/lib/selenium/webdriver/child_process.rb +2 -0
- data/common/src/rb/lib/selenium/webdriver/core_ext/dir.rb +1 -0
- data/common/src/rb/lib/selenium/webdriver/core_ext/string.rb +5 -0
- data/common/src/rb/lib/selenium/webdriver/driver.rb +20 -15
- data/common/src/rb/lib/selenium/webdriver/driver_extensions/takes_screenshot.rb +7 -2
- data/common/src/rb/lib/selenium/webdriver/element.rb +11 -2
- data/common/src/rb/lib/selenium/webdriver/error.rb +9 -5
- data/common/src/rb/lib/selenium/webdriver/keys.rb +1 -2
- data/common/src/rb/lib/selenium/webdriver/navigation.rb +16 -0
- data/common/src/rb/lib/selenium/webdriver/options.rb +32 -0
- data/common/src/rb/lib/selenium/webdriver/platform.rb +17 -1
- data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
- data/firefox/src/extension/components/dispatcher.js +492 -0
- data/firefox/src/extension/components/driver-component.js +4 -1
- data/firefox/src/extension/components/errorcode.js +70 -0
- data/firefox/src/extension/components/firefoxDriver.js +173 -154
- data/firefox/src/extension/components/nsCommandProcessor.js +171 -132
- data/firefox/src/extension/components/promptService.js +5 -5
- data/firefox/src/extension/components/request.js +219 -0
- data/firefox/src/extension/components/response.js +276 -0
- data/firefox/src/extension/components/session.js +281 -0
- data/firefox/src/extension/components/sessionstore.js +226 -0
- data/firefox/src/extension/components/socketListener.js +350 -100
- data/firefox/src/extension/components/utils.js +166 -98
- data/firefox/src/extension/components/webdriverserver.js +9 -5
- data/firefox/src/extension/components/wrappedElement.js +189 -166
- data/firefox/src/extension/install.rdf +1 -1
- data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +2 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +39 -33
- data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +7 -421
- data/firefox/src/rb/lib/selenium/webdriver/firefox/extension_connection.rb +7 -64
- data/firefox/src/rb/lib/selenium/webdriver/firefox/launcher.rb +2 -3
- data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +54 -10
- data/firefox/src/rb/lib/selenium/webdriver/firefox/profiles_ini.rb +2 -0
- data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +6 -0
- data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
- data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie.rb +2 -0
- data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +38 -13
- data/jobbie/src/rb/lib/selenium/webdriver/ie/lib.rb +9 -2
- data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +5 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote.rb +2 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +42 -38
- data/remote/client/src/rb/lib/selenium/webdriver/remote/commands.rb +56 -47
- data/remote/client/src/rb/lib/selenium/webdriver/remote/default_http_client.rb +26 -26
- data/remote/client/src/rb/lib/selenium/webdriver/remote/patron_http_client.rb +58 -0
- data/remote/client/src/rb/lib/selenium/webdriver/remote/response.rb +10 -12
- data/remote/client/src/rb/lib/selenium/webdriver/remote/server_error.rb +2 -17
- metadata +44 -23
- data/common/src/js/context.js +0 -58
- data/firefox/src/extension/components/context.js +0 -37
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Selenium
|
|
2
2
|
module WebDriver
|
|
3
3
|
module Firefox
|
|
4
|
+
|
|
5
|
+
# @private
|
|
4
6
|
class ExtensionConnection
|
|
5
7
|
|
|
6
8
|
def initialize(host, port)
|
|
@@ -8,11 +10,15 @@ module Selenium
|
|
|
8
10
|
@port = port
|
|
9
11
|
end
|
|
10
12
|
|
|
13
|
+
def url
|
|
14
|
+
"http://#{@host}:#{@port}/hub"
|
|
15
|
+
end
|
|
16
|
+
|
|
11
17
|
def connect(timeout = 20)
|
|
12
18
|
Timeout.timeout(timeout) {
|
|
13
19
|
loop do
|
|
14
20
|
begin
|
|
15
|
-
return
|
|
21
|
+
return TCPSocket.new(@host, @port).close
|
|
16
22
|
rescue Errno::ECONNREFUSED, Errno::ENOTCONN, SocketError => e
|
|
17
23
|
$stderr.puts "#{self} caught #{e.message} for #{@host}:#{@port}" if $DEBUG
|
|
18
24
|
sleep 0.25
|
|
@@ -21,69 +27,6 @@ module Selenium
|
|
|
21
27
|
}
|
|
22
28
|
end
|
|
23
29
|
|
|
24
|
-
def new_socket
|
|
25
|
-
@socket = TCPSocket.new(@host, @port)
|
|
26
|
-
@socket.sync = true
|
|
27
|
-
|
|
28
|
-
@socket
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def connected?
|
|
32
|
-
@socket && !@socket.closed?
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def send_string(str)
|
|
36
|
-
str = <<-HTTP
|
|
37
|
-
GET / HTTP/1.1
|
|
38
|
-
Host: localhost
|
|
39
|
-
Content-Length: #{str.length}
|
|
40
|
-
|
|
41
|
-
#{str}
|
|
42
|
-
HTTP
|
|
43
|
-
@socket.write str
|
|
44
|
-
@socket.flush
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def quit
|
|
48
|
-
command = {'commandName' => 'quit', 'context' => ''}
|
|
49
|
-
send_string(command.to_json)
|
|
50
|
-
ensure
|
|
51
|
-
close
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def close
|
|
55
|
-
@socket.close if connected?
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def read_response
|
|
59
|
-
resp = ""
|
|
60
|
-
received = ""
|
|
61
|
-
|
|
62
|
-
until resp.include?("\n\n")
|
|
63
|
-
received = @socket.recv 1
|
|
64
|
-
if received
|
|
65
|
-
resp += received
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
length = Integer(resp.split(":").last.strip)
|
|
70
|
-
json_string = ''
|
|
71
|
-
bytes_received = 0
|
|
72
|
-
|
|
73
|
-
until bytes_received == length
|
|
74
|
-
read_string = @socket.recv(length - bytes_received)
|
|
75
|
-
|
|
76
|
-
bytes_received += read_string.length
|
|
77
|
-
json_string << read_string
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
if json_string.empty?
|
|
81
|
-
raise Error::WebDriverError, "empty response from extension"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
JSON.parse json_string
|
|
85
|
-
end
|
|
86
|
-
|
|
87
30
|
end # ExtensionConnection
|
|
88
31
|
end # Firefox
|
|
89
32
|
end # WebDriver
|
|
@@ -3,12 +3,13 @@ require "fcntl"
|
|
|
3
3
|
module Selenium
|
|
4
4
|
module WebDriver
|
|
5
5
|
module Firefox
|
|
6
|
+
|
|
7
|
+
# @private
|
|
6
8
|
class Launcher
|
|
7
9
|
|
|
8
10
|
attr_reader :binary, :connection
|
|
9
11
|
SOCKET_LOCK_TIMEOUT = 45
|
|
10
12
|
|
|
11
|
-
|
|
12
13
|
def initialize(binary, port = DEFAULT_PORT, profile = DEFAULT_PROFILE_NAME)
|
|
13
14
|
@binary = binary
|
|
14
15
|
@port = port.to_i
|
|
@@ -82,7 +83,6 @@ module Selenium
|
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
@profile.delete_extensions_cache
|
|
85
|
-
|
|
86
86
|
@profile.port = @port
|
|
87
87
|
@profile.add_webdriver_extension(true)
|
|
88
88
|
@profile.update_user_prefs
|
|
@@ -111,7 +111,6 @@ module Selenium
|
|
|
111
111
|
begin
|
|
112
112
|
connection = ExtensionConnection.new(@host, @port)
|
|
113
113
|
connection.connect(1)
|
|
114
|
-
connection.close
|
|
115
114
|
|
|
116
115
|
connect
|
|
117
116
|
return
|
|
@@ -36,7 +36,6 @@ module Selenium
|
|
|
36
36
|
attr_accessor :port
|
|
37
37
|
|
|
38
38
|
class << self
|
|
39
|
-
|
|
40
39
|
def ini
|
|
41
40
|
@ini ||= ProfilesIni.new
|
|
42
41
|
end
|
|
@@ -44,9 +43,20 @@ module Selenium
|
|
|
44
43
|
def from_name(name)
|
|
45
44
|
ini[name]
|
|
46
45
|
end
|
|
47
|
-
|
|
48
46
|
end
|
|
49
47
|
|
|
48
|
+
#
|
|
49
|
+
# Create a new Profile instance
|
|
50
|
+
#
|
|
51
|
+
# @example User configured profile
|
|
52
|
+
#
|
|
53
|
+
# profile = Selenium::WebDriver::Firefox::Profile.new
|
|
54
|
+
# profile['network.proxy.http'] = 'localhost'
|
|
55
|
+
# profile['network.proxy.http_port'] = 9090
|
|
56
|
+
#
|
|
57
|
+
# driver = Selenium::WebDriver.for :firefox, :profile => profile
|
|
58
|
+
#
|
|
59
|
+
|
|
50
60
|
def initialize(directory = nil)
|
|
51
61
|
@directory = directory ? create_tmp_copy(directory) : Dir.mktmpdir("webdriver-profile")
|
|
52
62
|
|
|
@@ -60,6 +70,30 @@ module Selenium
|
|
|
60
70
|
@native_events = DEFAULT_ENABLE_NATIVE_EVENTS
|
|
61
71
|
@secure_ssl = DEFAULT_SECURE_SSL
|
|
62
72
|
@load_no_focus_lib = DEFAULT_LOAD_NO_FOCUS_LIB
|
|
73
|
+
|
|
74
|
+
@additional_prefs = {}
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Set a preference for this particular profile.
|
|
79
|
+
# @see http://preferential.mozdev.org/preferences.html
|
|
80
|
+
#
|
|
81
|
+
|
|
82
|
+
def []=(key, value)
|
|
83
|
+
case value
|
|
84
|
+
when String
|
|
85
|
+
if Util.stringified?(value)
|
|
86
|
+
raise ArgumentError, "preference values must be plain strings: #{key.inspect} => #{value.inspect}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
value = %{"#{value}"}
|
|
90
|
+
when TrueClass, FalseClass, Integer, Float
|
|
91
|
+
value = value.to_s
|
|
92
|
+
else
|
|
93
|
+
raise TypeError, "invalid preference: #{value.inspect}:#{value.class}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
@additional_prefs[key.to_s] = value
|
|
63
97
|
end
|
|
64
98
|
|
|
65
99
|
def absolute_path
|
|
@@ -71,10 +105,16 @@ module Selenium
|
|
|
71
105
|
end
|
|
72
106
|
|
|
73
107
|
def update_user_prefs
|
|
74
|
-
prefs = current_user_prefs
|
|
75
|
-
|
|
108
|
+
prefs = current_user_prefs
|
|
109
|
+
|
|
110
|
+
prefs.merge! OVERRIDABLE_PREFERENCES
|
|
111
|
+
prefs.merge! @additional_prefs
|
|
112
|
+
prefs.merge! DEFAULT_PREFERENCES
|
|
113
|
+
|
|
114
|
+
prefs['webdriver_firefox_port'] = @port
|
|
76
115
|
prefs['webdriver_accept_untrusted_certs'] = 'true' unless secure_ssl?
|
|
77
|
-
prefs['webdriver_enable_native_events']
|
|
116
|
+
prefs['webdriver_enable_native_events'] = 'true' if native_events?
|
|
117
|
+
prefs["startup.homepage_welcome_url"] = prefs["browser.startup.homepage"] # If the user sets the home page, we should also start up there
|
|
78
118
|
|
|
79
119
|
write_prefs prefs
|
|
80
120
|
end
|
|
@@ -126,7 +166,7 @@ module Selenium
|
|
|
126
166
|
end
|
|
127
167
|
|
|
128
168
|
def user_prefs_path
|
|
129
|
-
@
|
|
169
|
+
@user_prefs_path ||= File.join(directory, "user.js")
|
|
130
170
|
end
|
|
131
171
|
|
|
132
172
|
def delete_extensions_cache
|
|
@@ -188,11 +228,17 @@ module Selenium
|
|
|
188
228
|
def write_prefs(prefs)
|
|
189
229
|
File.open(user_prefs_path, "w") do |file|
|
|
190
230
|
prefs.each do |key, value|
|
|
191
|
-
|
|
231
|
+
p key => value if $DEBUG
|
|
232
|
+
file.puts %{user_pref("#{key}", #{value});}
|
|
192
233
|
end
|
|
193
234
|
end
|
|
194
235
|
end
|
|
195
236
|
|
|
237
|
+
OVERRIDABLE_PREFERENCES = {
|
|
238
|
+
"browser.startup.page" => '0',
|
|
239
|
+
"browser.startup.homepage" => '"about:blank"'
|
|
240
|
+
}.freeze
|
|
241
|
+
|
|
196
242
|
DEFAULT_PREFERENCES = {
|
|
197
243
|
"app.update.auto" => 'false',
|
|
198
244
|
"app.update.enabled" => 'false',
|
|
@@ -205,7 +251,6 @@ module Selenium
|
|
|
205
251
|
"browser.search.update" => 'false',
|
|
206
252
|
"browser.sessionstore.resume_from_crash" => 'false',
|
|
207
253
|
"browser.shell.checkDefaultBrowser" => 'false',
|
|
208
|
-
"browser.startup.page" => '0',
|
|
209
254
|
"browser.tabs.warnOnClose" => 'false',
|
|
210
255
|
"browser.tabs.warnOnOpen" => 'false',
|
|
211
256
|
"dom.disable_open_during_load" => 'false',
|
|
@@ -222,10 +267,9 @@ module Selenium
|
|
|
222
267
|
"security.warn_viewing_mixed" => 'false',
|
|
223
268
|
"security.warn_viewing_mixed.show_once" => 'false',
|
|
224
269
|
"signon.rememberSignons" => 'false',
|
|
225
|
-
"startup.homepage_welcome_url" => '"about:blank"',
|
|
226
270
|
"javascript.options.showInConsole" => 'true',
|
|
227
271
|
"browser.dom.window.dump.enabled" => 'true'
|
|
228
|
-
}
|
|
272
|
+
}.freeze
|
|
229
273
|
|
|
230
274
|
end # Profile
|
|
231
275
|
end # Firefox
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Selenium
|
|
2
2
|
module WebDriver
|
|
3
3
|
module Firefox
|
|
4
|
+
|
|
5
|
+
# @private
|
|
4
6
|
module Util
|
|
5
7
|
module_function
|
|
6
8
|
|
|
@@ -17,6 +19,10 @@ module Selenium
|
|
|
17
19
|
end
|
|
18
20
|
end
|
|
19
21
|
|
|
22
|
+
def stringified?(str)
|
|
23
|
+
str =~ /^".*"$/
|
|
24
|
+
end
|
|
25
|
+
|
|
20
26
|
end # Util
|
|
21
27
|
end # Firefox
|
|
22
28
|
end # WebDriver
|
|
Binary file
|
|
Binary file
|
|
@@ -2,6 +2,10 @@ module Selenium
|
|
|
2
2
|
module WebDriver
|
|
3
3
|
module IE
|
|
4
4
|
|
|
5
|
+
#
|
|
6
|
+
# @private
|
|
7
|
+
#
|
|
8
|
+
|
|
5
9
|
class Bridge
|
|
6
10
|
include Util
|
|
7
11
|
|
|
@@ -335,7 +339,7 @@ module Selenium
|
|
|
335
339
|
|
|
336
340
|
def getElementAttribute(element_pointer, name)
|
|
337
341
|
create_string do |string_pointer|
|
|
338
|
-
check_error_code Lib.wdeGetAttribute(element_pointer, wstring_ptr(name), string_pointer),
|
|
342
|
+
check_error_code Lib.wdeGetAttribute(@driver_pointer, element_pointer, wstring_ptr(name), string_pointer),
|
|
339
343
|
"unable to get attribute #{name.inspect}"
|
|
340
344
|
end
|
|
341
345
|
end
|
|
@@ -506,48 +510,69 @@ module Selenium
|
|
|
506
510
|
script_result = pointer_ref.get_pointer(0)
|
|
507
511
|
|
|
508
512
|
pointers_to_free << type_pointer = FFI::MemoryPointer.new(:int)
|
|
509
|
-
result = Lib.wdGetScriptResultType(script_result, type_pointer)
|
|
513
|
+
result = Lib.wdGetScriptResultType(@driver_pointer, script_result, type_pointer)
|
|
510
514
|
|
|
511
515
|
check_error_code result, "Cannot determine result type"
|
|
516
|
+
result_type = type_pointer.get_int(0)
|
|
512
517
|
|
|
513
|
-
case
|
|
514
|
-
when 1
|
|
518
|
+
case result_type
|
|
519
|
+
when 1 # String
|
|
515
520
|
create_string do |wrapper|
|
|
516
521
|
check_error_code Lib.wdGetStringScriptResult(script_result, wrapper), "Cannot extract string result"
|
|
517
522
|
end
|
|
518
|
-
when 2
|
|
523
|
+
when 2 # Long
|
|
519
524
|
pointers_to_free << long_pointer = FFI::MemoryPointer.new(:long)
|
|
520
525
|
check_error_code Lib.wdGetNumberScriptResult(script_result, long_pointer),
|
|
521
526
|
"Cannot extract number result"
|
|
522
527
|
|
|
523
528
|
long_pointer.get_long(0)
|
|
524
|
-
when 3
|
|
529
|
+
when 3 # Boolean
|
|
525
530
|
pointers_to_free << int_pointer = FFI::MemoryPointer.new(:int)
|
|
526
531
|
check_error_code Lib.wdGetBooleanScriptResult(script_result, int_pointer),
|
|
527
532
|
"Cannot extract boolean result"
|
|
528
533
|
|
|
529
534
|
int_pointer.get_int(0) == 1
|
|
530
|
-
when 4
|
|
531
|
-
element_pointer = FFI::MemoryPointer.new(:pointer)
|
|
535
|
+
when 4 # WebElement
|
|
536
|
+
pointers_to_free << element_pointer = FFI::MemoryPointer.new(:pointer)
|
|
532
537
|
check_error_code Lib.wdGetElementScriptResult(script_result, @driver_pointer, element_pointer),
|
|
533
538
|
"Cannot extract element result"
|
|
534
539
|
|
|
535
540
|
Element.new(self, element_pointer.get_pointer(0))
|
|
536
|
-
when 5
|
|
541
|
+
when 5 # Nothing
|
|
537
542
|
nil
|
|
538
|
-
when 6
|
|
543
|
+
when 6 # Exception
|
|
539
544
|
message = create_string do |string_pointer|
|
|
540
545
|
check_error_code Lib.wdGetStringScriptResult(script_result, string_pointer), "Cannot extract string result"
|
|
541
546
|
end
|
|
542
547
|
|
|
543
|
-
raise WebDriverError, message
|
|
544
|
-
when 7
|
|
548
|
+
raise Error::WebDriverError, message
|
|
549
|
+
when 7 # Double
|
|
545
550
|
pointers_to_free << double_pointer = FFI::MemoryPointer.new(:double)
|
|
546
551
|
check_error_code Lib.wdGetDoubleScriptResult(script_result, double_pointer), "Cannot extract double result"
|
|
547
552
|
|
|
548
553
|
double_pointer.get_double(0)
|
|
554
|
+
when 8 # Array
|
|
555
|
+
pointers_to_free << array_length_pointer = FFI::MemoryPointer.new(:int)
|
|
556
|
+
check_error_code Lib.wdGetArrayLengthScriptResult(@driver_pointer, script_result, array_length_pointer),
|
|
557
|
+
"Cannot extract array length"
|
|
558
|
+
|
|
559
|
+
arr = []
|
|
560
|
+
array_length_pointer.get_int(0).times do |idx|
|
|
561
|
+
current_item_pointer = FFI::MemoryPointer.new(:pointer)
|
|
562
|
+
result_code = Lib.wdGetArrayItemFromScriptResult(@driver_pointer, script_result, idx, current_item_pointer)
|
|
563
|
+
|
|
564
|
+
# free the pointer if the call failed
|
|
565
|
+
if Error.for_code(result_code)
|
|
566
|
+
Lib.wdFreeScriptResult(current_item_pointer.get_pointer(0))
|
|
567
|
+
check_error_code result_code
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
arr << extract_return_value(current_item_pointer)
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
arr
|
|
549
574
|
else
|
|
550
|
-
raise WebDriverError, "Cannot determine result type"
|
|
575
|
+
raise Error::WebDriverError, "Cannot determine result type (#{result_type.inspect})"
|
|
551
576
|
end
|
|
552
577
|
ensure
|
|
553
578
|
Lib.wdFreeScriptResult(script_result) if script_result
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
module Selenium
|
|
2
2
|
module WebDriver
|
|
3
3
|
module IE
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# @private
|
|
7
|
+
#
|
|
8
|
+
|
|
4
9
|
module Lib
|
|
5
10
|
extend FFI::Library
|
|
6
11
|
|
|
@@ -20,7 +25,7 @@ module Selenium
|
|
|
20
25
|
attach_function :wdCopyString, [:pointer, :int, :pointer ], :int
|
|
21
26
|
attach_function :wdeClear, [:pointer ], :int
|
|
22
27
|
attach_function :wdeClick, [:pointer ], :int
|
|
23
|
-
attach_function :wdeGetAttribute, [:pointer, :pointer, :pointer
|
|
28
|
+
attach_function :wdeGetAttribute, [:pointer, :pointer, :pointer, :pointer ], :int
|
|
24
29
|
attach_function :wdeGetDetailsOnceScrolledOnToScreen, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer ], :int
|
|
25
30
|
attach_function :wdeGetLocation, [:pointer, :pointer, :pointer ], :int
|
|
26
31
|
attach_function :wdeGetSize, [:pointer, :pointer, :pointer ], :int
|
|
@@ -60,6 +65,8 @@ module Selenium
|
|
|
60
65
|
attach_function :wdFreeString, [:pointer ], :int
|
|
61
66
|
attach_function :wdFreeStringCollection, [:pointer ], :int
|
|
62
67
|
attach_function :wdGet, [:pointer, :pointer ], :int
|
|
68
|
+
attach_function :wdGetArrayLengthScriptResult, [:pointer, :pointer, :pointer ], :int
|
|
69
|
+
attach_function :wdGetArrayItemFromScriptResult, [:pointer, :pointer, :int, :pointer ], :int
|
|
63
70
|
attach_function :wdGetAllWindowHandles, [:pointer, :pointer ], :int
|
|
64
71
|
attach_function :wdGetBooleanScriptResult, [:pointer, :pointer ], :int
|
|
65
72
|
attach_function :wdGetCookies, [:pointer, :pointer ], :int
|
|
@@ -69,7 +76,7 @@ module Selenium
|
|
|
69
76
|
attach_function :wdGetElementScriptResult, [:pointer, :pointer, :pointer ], :int
|
|
70
77
|
attach_function :wdGetNumberScriptResult, [:pointer, :pointer ], :int
|
|
71
78
|
attach_function :wdGetPageSource, [:pointer, :pointer ], :int
|
|
72
|
-
attach_function :wdGetScriptResultType, [:pointer, :pointer
|
|
79
|
+
attach_function :wdGetScriptResultType, [:pointer, :pointer, :pointer ], :int
|
|
73
80
|
attach_function :wdGetStringScriptResult, [:pointer, :pointer ], :int
|
|
74
81
|
attach_function :wdGetTitle, [:pointer, :pointer ], :int
|
|
75
82
|
attach_function :wdGetVisible, [:pointer, :pointer ], :int
|