selenium-webdriver 0.1.1 → 0.1.2

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.
Files changed (42) hide show
  1. data/CHANGES +10 -0
  2. data/lib/selenium/webdriver.rb +23 -1
  3. data/lib/selenium/webdriver/chrome/bridge.rb +5 -1
  4. data/lib/selenium/webdriver/chrome/command_executor.rb +1 -1
  5. data/lib/selenium/webdriver/chrome/extension.zip +0 -0
  6. data/lib/selenium/webdriver/chrome/launcher.rb +10 -4
  7. data/lib/selenium/webdriver/common.rb +1 -0
  8. data/lib/selenium/webdriver/common/alert.rb +27 -0
  9. data/lib/selenium/webdriver/common/bridge_helper.rb +10 -7
  10. data/lib/selenium/webdriver/common/core_ext/dir.rb +1 -1
  11. data/lib/selenium/webdriver/common/driver.rb +8 -16
  12. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +1 -1
  13. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +1 -1
  14. data/lib/selenium/webdriver/common/element.rb +4 -4
  15. data/lib/selenium/webdriver/common/keys.rb +3 -1
  16. data/lib/selenium/webdriver/common/options.rb +2 -2
  17. data/lib/selenium/webdriver/common/platform.rb +11 -3
  18. data/lib/selenium/webdriver/common/socket_poller.rb +5 -1
  19. data/lib/selenium/webdriver/common/target_locator.rb +11 -3
  20. data/lib/selenium/webdriver/common/timeouts.rb +10 -0
  21. data/lib/selenium/webdriver/firefox/binary.rb +4 -2
  22. data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
  23. data/lib/selenium/webdriver/firefox/extension.rb +2 -2
  24. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  25. data/lib/selenium/webdriver/firefox/launcher.rb +1 -1
  26. data/lib/selenium/webdriver/firefox/profiles_ini.rb +2 -2
  27. data/lib/selenium/webdriver/firefox/socket_lock.rb +1 -1
  28. data/lib/selenium/webdriver/firefox/util.rb +2 -2
  29. data/lib/selenium/webdriver/ie.rb +3 -4
  30. data/lib/selenium/webdriver/ie/bridge.rb +20 -565
  31. data/lib/selenium/webdriver/ie/lib.rb +4 -99
  32. data/lib/selenium/webdriver/ie/native/win32/IEDriver.dll +0 -0
  33. data/lib/selenium/webdriver/ie/native/x64/IEDriver.dll +0 -0
  34. data/lib/selenium/webdriver/remote.rb +1 -1
  35. data/lib/selenium/webdriver/remote/bridge.rb +21 -1
  36. data/lib/selenium/webdriver/remote/commands.rb +6 -1
  37. data/lib/selenium/webdriver/remote/http/default.rb +2 -1
  38. data/lib/selenium/webdriver/remote/response.rb +1 -1
  39. metadata +19 -10
  40. data/lib/selenium/webdriver/ie/native/win32/InternetExplorerDriver.dll +0 -0
  41. data/lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll +0 -0
  42. data/lib/selenium/webdriver/ie/util.rb +0 -138
@@ -3,7 +3,7 @@ module Selenium
3
3
  module IE
4
4
 
5
5
  #
6
- # @private
6
+ # @api private
7
7
  #
8
8
 
9
9
  module Lib
@@ -15,107 +15,12 @@ module Selenium
15
15
  ffi_lib WebDriver::IE::DLLS[:win32]
16
16
  end
17
17
 
18
- attach_function :wdAddBooleanScriptArg, [:pointer, :int ], :int
19
- attach_function :wdAddCookie, [:pointer, :pointer ], :int
20
- attach_function :wdAddDoubleScriptArg, [:pointer, :double ], :int
21
- attach_function :wdAddElementScriptArg, [:pointer, :pointer ], :int
22
- attach_function :wdAddNumberScriptArg, [:pointer, :long ], :int
23
- attach_function :wdAddStringScriptArg, [:pointer, :pointer ], :int
24
- attach_function :wdcGetElementAtIndex, [:pointer, :int, :pointer ], :int
25
- attach_function :wdcGetElementCollectionLength, [:pointer, :pointer ], :int
26
- attach_function :wdcGetStringAtIndex, [:pointer, :int, :pointer ], :int
27
- attach_function :wdcGetStringCollectionLength, [:pointer, :pointer ], :int
28
- attach_function :wdClose, [:pointer ], :int
29
- attach_function :wdCopyString, [:pointer, :int, :pointer ], :int
30
- attach_function :wdeClear, [:pointer ], :int
31
- attach_function :wdeClick, [:pointer ], :int
32
- attach_function :wdeGetAttribute, [:pointer, :pointer, :pointer, :pointer ], :int
33
- attach_function :wdeGetDetailsOnceScrolledOnToScreen, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer ], :int
34
- attach_function :wdeGetLocation, [:pointer, :pointer, :pointer ], :int
35
- attach_function :wdeGetSize, [:pointer, :pointer, :pointer ], :int
36
- attach_function :wdeGetTagName, [:pointer, :pointer ], :int
37
- attach_function :wdeGetText, [:pointer, :pointer ], :int
38
- attach_function :wdeGetValueOfCssProperty, [:pointer, :pointer, :pointer ], :int
39
- attach_function :wdeIsDisplayed, [:pointer, :pointer ], :int
40
- attach_function :wdeIsEnabled, [:pointer, :pointer ], :int
41
- attach_function :wdeIsSelected, [:pointer, :pointer ], :int
42
- attach_function :wdeMouseDownAt, [:pointer, :long, :long ], :int #hwnd, nativelong
43
- attach_function :wdeMouseMoveTo, [:pointer, :long, :long, :long, :long, :long ], :int # hwnd, 5x nativelong
44
- attach_function :wdeMouseUpAt, [:pointer, :long, :long ], :int # hwnd
45
- attach_function :wdeSendKeys, [:pointer, :pointer ], :int
46
- attach_function :wdeSetSelected, [:pointer ], :int
47
- attach_function :wdeSubmit, [:pointer ], :int
48
- attach_function :wdeToggle, [:pointer, :pointer ], :int
49
- attach_function :wdExecuteScript, [:pointer, :pointer, :pointer, :pointer ], :int
50
- attach_function :wdeFreeElement, [:pointer ], :int
51
- attach_function :wdFindElementByClassName, [:pointer, :pointer, :pointer, :pointer ], :int
52
- attach_function :wdFindElementByCss, [:pointer, :pointer, :pointer, :pointer ], :int
53
- attach_function :wdFindElementById, [:pointer, :pointer, :pointer, :pointer ], :int
54
- attach_function :wdFindElementByLinkText, [:pointer, :pointer, :pointer, :pointer ], :int
55
- attach_function :wdFindElementByName, [:pointer, :pointer, :pointer, :pointer ], :int
56
- attach_function :wdFindElementByPartialLinkText, [:pointer, :pointer, :pointer, :pointer ], :int
57
- attach_function :wdFindElementByTagName, [:pointer, :pointer, :pointer, :pointer ], :int
58
- attach_function :wdFindElementByXPath, [:pointer, :pointer, :pointer, :pointer ], :int
59
- attach_function :wdFindElementsByClassName, [:pointer, :pointer, :pointer, :pointer ], :int
60
- attach_function :wdFindElementsByCss, [:pointer, :pointer, :pointer, :pointer ], :int
61
- attach_function :wdFindElementsById, [:pointer, :pointer, :pointer, :pointer ], :int
62
- attach_function :wdFindElementsByLinkText, [:pointer, :pointer, :pointer, :pointer ], :int
63
- attach_function :wdFindElementsByName, [:pointer, :pointer, :pointer, :pointer ], :int
64
- attach_function :wdFindElementsByPartialLinkText, [:pointer, :pointer, :pointer, :pointer ], :int
65
- attach_function :wdFindElementsByTagName, [:pointer, :pointer, :pointer, :pointer ], :int
66
- attach_function :wdFindElementsByXPath, [:pointer, :pointer, :pointer, :pointer ], :int
67
- attach_function :wdFreeDriver, [:pointer ], :int
68
- attach_function :wdFreeElementCollection, [:pointer, :int ], :int
69
- attach_function :wdFreeScriptArgs, [:pointer ], :int
70
- attach_function :wdFreeScriptResult, [:pointer ], :int
71
- attach_function :wdFreeString, [:pointer ], :int
72
- attach_function :wdFreeStringCollection, [:pointer ], :int
73
- attach_function :wdGet, [:pointer, :pointer ], :int
74
- attach_function :wdGetArrayLengthScriptResult, [:pointer, :pointer, :pointer ], :int
75
- attach_function :wdGetArrayItemFromScriptResult, [:pointer, :pointer, :int, :pointer ], :int
76
- attach_function :wdGetAllWindowHandles, [:pointer, :pointer ], :int
77
- attach_function :wdGetBooleanScriptResult, [:pointer, :pointer ], :int
78
- attach_function :wdGetCookies, [:pointer, :pointer ], :int
79
- attach_function :wdGetCurrentUrl, [:pointer, :pointer ], :int
80
- attach_function :wdGetCurrentWindowHandle, [:pointer, :pointer ], :int
81
- attach_function :wdGetDoubleScriptResult, [:pointer, :pointer ], :int
82
- attach_function :wdGetElementScriptResult, [:pointer, :pointer, :pointer ], :int
83
- attach_function :wdGetNumberScriptResult, [:pointer, :pointer ], :int
84
- attach_function :wdGetPageSource, [:pointer, :pointer ], :int
85
- attach_function :wdGetScriptResultType, [:pointer, :pointer, :pointer ], :int
86
- attach_function :wdGetStringScriptResult, [:pointer, :pointer ], :int
87
- attach_function :wdGetTitle, [:pointer, :pointer ], :int
88
- attach_function :wdGetVisible, [:pointer, :pointer ], :int
89
- attach_function :wdGoBack, [:pointer ], :int
90
- attach_function :wdGoForward, [:pointer ], :int
91
- attach_function :wdNewDriverInstance, [:pointer ], :int
92
- attach_function :wdNewScriptArgs, [:pointer, :int ], :int
93
- attach_function :wdRefresh, [:pointer, ], :int
94
- attach_function :wdSetImplicitWaitTimeout, [:pointer, :long ], :int
95
- attach_function :wdSetVisible, [:pointer, :int ], :int
96
- attach_function :wdStringLength, [:pointer, :pointer ], :int
97
- attach_function :wdSwitchToActiveElement, [:pointer, :pointer ], :int
98
- attach_function :wdSwitchToFrame, [:pointer, :pointer ], :int
99
- attach_function :wdSwitchToWindow, [:pointer, :pointer ], :int
100
- attach_function :wdWaitForLoadToComplete, [:pointer ], :int
18
+ ffi_convention :stdcall
101
19
 
102
- def self.finalize_element(ptr)
103
- code = Lib.wdeFreeElement(ptr)
104
- if err = WebDriver::Error.for_code(code)
105
- raise err, "could not free element (#{ptr})"
106
- end
107
- end
20
+ attach_function :start_server, :StartServer, [:int], :pointer
21
+ attach_function :stop_server, :StopServer, [:pointer], :void
108
22
 
109
23
  end # Lib
110
-
111
- module Kernel32
112
- extend FFI::Library
113
-
114
- ffi_lib "kernel32.dll"
115
-
116
- attach_function :MultiByteToWideChar, [:int, :long, :pointer, :int, :pointer, :int ], :int
117
- attach_function :WideCharToMultiByte, [:int, :long, :pointer, :int, :pointer, :int, :pointer, :pointer], :int
118
- end
119
24
  end # IE
120
25
  end # WebDriver
121
26
  end # Selenium
@@ -11,7 +11,7 @@ require "selenium/webdriver/remote/http/default"
11
11
  module Selenium
12
12
  module WebDriver
13
13
 
14
- # @private
14
+ # @api private
15
15
  module Remote
16
16
 
17
17
  end
@@ -7,7 +7,7 @@ module Selenium
7
7
  #
8
8
  # Low level bridge to the remote server, through which the rest of the API works.
9
9
  #
10
- # @private
10
+ # @api private
11
11
  #
12
12
 
13
13
  class Bridge
@@ -104,6 +104,26 @@ module Selenium
104
104
  execute :setImplicitWaitTimeout, {}, :ms => milliseconds
105
105
  end
106
106
 
107
+ def setScriptTimeout(milliseconds)
108
+ execute :setScriptTimeout, {}, :ms => milliseconds
109
+ end
110
+
111
+ def acceptAlert
112
+ execute :acceptAlert
113
+ end
114
+
115
+ def dismissAlert
116
+ execute :dismissAlert
117
+ end
118
+
119
+ def setAlertValue(keys)
120
+ execute :setAlertValue, {}, :text => keys.to_s
121
+ end
122
+
123
+ def getAlertText
124
+ execute :getAlertText
125
+ end
126
+
107
127
  def goBack
108
128
  execute :goBack
109
129
  end
@@ -1,4 +1,4 @@
1
- # @private
1
+ # @api private
2
2
  class Selenium::WebDriver::Remote::Bridge
3
3
 
4
4
  #
@@ -9,10 +9,15 @@ class Selenium::WebDriver::Remote::Bridge
9
9
  command :getCapabilities, :get, "session/:session_id"
10
10
  command :quit, :delete, "session/:session_id"
11
11
  command :setImplicitWaitTimeout, :post, "session/:session_id/timeouts/implicit_wait"
12
+ command :setScriptTimeout, :post, "session/:session_id/timeouts/async_script"
12
13
  command :getCurrentWindowHandle, :get, "session/:session_id/window_handle"
13
14
  command :getWindowHandles, :get, "session/:session_id/window_handles"
14
15
  command :getCurrentUrl, :get, "session/:session_id/url"
15
16
  command :get, :post, "session/:session_id/url"
17
+ command :dismissAlert, :post, "session/:session_id/dismiss_alert"
18
+ command :acceptAlert, :post, "session/:session_id/accept_alert"
19
+ command :getAlertText, :get, "session/:session_id/alert_text"
20
+ command :setAlertValue, :post, "session/:session_id/alert_text"
16
21
  command :goForward, :post, "session/:session_id/forward"
17
22
  command :goBack, :post, "session/:session_id/back"
18
23
  command :refresh, :post, "session/:session_id/refresh"
@@ -4,7 +4,8 @@ module Selenium
4
4
  module WebDriver
5
5
  module Remote
6
6
  module Http
7
- # @private
7
+
8
+ # @api private
8
9
  class Default < Common
9
10
  attr_accessor :proxy
10
11
 
@@ -2,7 +2,7 @@ module Selenium
2
2
  module WebDriver
3
3
  module Remote
4
4
 
5
- # @private
5
+ # @api private
6
6
  class Response
7
7
 
8
8
  attr_reader :code, :payload
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jari Bakken
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-30 00:00:00 +01:00
17
+ date: 2010-12-22 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: json_pure
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
@@ -33,6 +34,7 @@ dependencies:
33
34
  name: rubyzip
34
35
  prerelease: false
35
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
36
38
  requirements:
37
39
  - - ">="
38
40
  - !ruby/object:Gem::Version
@@ -45,20 +47,22 @@ dependencies:
45
47
  name: childprocess
46
48
  prerelease: false
47
49
  requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
48
51
  requirements:
49
- - - "="
52
+ - - ~>
50
53
  - !ruby/object:Gem::Version
51
54
  segments:
52
55
  - 0
53
56
  - 1
54
- - 4
55
- version: 0.1.4
57
+ - 5
58
+ version: 0.1.5
56
59
  type: :runtime
57
60
  version_requirements: *id003
58
61
  - !ruby/object:Gem::Dependency
59
62
  name: ffi
60
63
  prerelease: false
61
64
  requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
62
66
  requirements:
63
67
  - - ~>
64
68
  - !ruby/object:Gem::Version
@@ -73,6 +77,7 @@ dependencies:
73
77
  name: rspec
74
78
  prerelease: false
75
79
  requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
76
81
  requirements:
77
82
  - - "="
78
83
  - !ruby/object:Gem::Version
@@ -87,6 +92,7 @@ dependencies:
87
92
  name: rack
88
93
  prerelease: false
89
94
  requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
90
96
  requirements:
91
97
  - - ~>
92
98
  - !ruby/object:Gem::Version
@@ -100,6 +106,7 @@ dependencies:
100
106
  name: ci_reporter
101
107
  prerelease: false
102
108
  requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
103
110
  requirements:
104
111
  - - ~>
105
112
  - !ruby/object:Gem::Version
@@ -148,6 +155,7 @@ files:
148
155
  - lib/selenium/webdriver/chrome/command_executor.rb
149
156
  - lib/selenium/webdriver/chrome/extension.zip
150
157
  - lib/selenium/webdriver/chrome/launcher.rb
158
+ - lib/selenium/webdriver/common/alert.rb
151
159
  - lib/selenium/webdriver/common/bridge_helper.rb
152
160
  - lib/selenium/webdriver/common/driver.rb
153
161
  - lib/selenium/webdriver/common/element.rb
@@ -181,9 +189,8 @@ files:
181
189
  - lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so
182
190
  - lib/selenium/webdriver/ie/bridge.rb
183
191
  - lib/selenium/webdriver/ie/lib.rb
184
- - lib/selenium/webdriver/ie/util.rb
185
- - lib/selenium/webdriver/ie/native/win32/InternetExplorerDriver.dll
186
- - lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll
192
+ - lib/selenium/webdriver/ie/native/win32/IEDriver.dll
193
+ - lib/selenium/webdriver/ie/native/x64/IEDriver.dll
187
194
  - lib/selenium/webdriver/iphone/bridge.rb
188
195
  - lib/selenium/webdriver/remote/bridge.rb
189
196
  - lib/selenium/webdriver/remote/capabilities.rb
@@ -205,6 +212,7 @@ rdoc_options: []
205
212
  require_paths:
206
213
  - lib
207
214
  required_ruby_version: !ruby/object:Gem::Requirement
215
+ none: false
208
216
  requirements:
209
217
  - - ">="
210
218
  - !ruby/object:Gem::Version
@@ -212,6 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
220
  - 0
213
221
  version: "0"
214
222
  required_rubygems_version: !ruby/object:Gem::Requirement
223
+ none: false
215
224
  requirements:
216
225
  - - ">="
217
226
  - !ruby/object:Gem::Version
@@ -221,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
230
  requirements: []
222
231
 
223
232
  rubyforge_project:
224
- rubygems_version: 1.3.6
233
+ rubygems_version: 1.3.7
225
234
  signing_key:
226
235
  specification_version: 3
227
236
  summary: The next generation developer focused tool for automated testing of webapps
@@ -1,138 +0,0 @@
1
- module Selenium
2
- module WebDriver
3
- module IE
4
-
5
- #
6
- # @private
7
- #
8
-
9
- module Util
10
- CP_UTF8 = 65001
11
-
12
- def string_array_from(raw_strings)
13
- strings_ptr = raw_strings.get_pointer(0)
14
- length_ptr = FFI::MemoryPointer.new :int
15
- result = Lib.wdcGetStringCollectionLength(strings_ptr, length_ptr)
16
-
17
- if result != 0
18
- raise Error::WebDriverError, "cannot extract strings from collection, error code: #{result.inspect}"
19
- end
20
-
21
- arr = []
22
-
23
- length_ptr.get_int(0).times do |idx|
24
- str_ptr_ref = FFI::MemoryPointer.new :pointer
25
- result = Lib.wdcGetStringAtIndex(strings_ptr, idx, str_ptr_ref)
26
-
27
- if result != 0
28
- raise Error::WebDriverError, "unable to get string at index: #{idx}, error: #{result}"
29
- end
30
-
31
- arr << extract_string_from(str_ptr_ref)
32
- end
33
-
34
- arr
35
- ensure
36
- Lib.wdFreeStringCollection(strings_ptr)
37
- end
38
-
39
- def create_element(&blk)
40
- element_ptr_ref = FFI::MemoryPointer.new :pointer
41
- yield element_ptr_ref
42
-
43
- auto_ptr = FFI::AutoPointer.new(element_ptr_ref.get_pointer(0), Lib.method(:finalize_element))
44
- Element.new(self, auto_ptr)
45
- end
46
-
47
- def create_element_collection(&blk)
48
- elements_ptr_ref = FFI::MemoryPointer.new :pointer
49
- yield elements_ptr_ref
50
-
51
- extract_elements_from elements_ptr_ref
52
- end
53
-
54
- def create_string(&blk)
55
- wrapper = FFI::MemoryPointer.new :pointer
56
- yield wrapper
57
-
58
- extract_string_from wrapper
59
- end
60
-
61
- def extract_string_from(string_ptr_ref)
62
- string_ptr = string_ptr_ref.get_pointer(0)
63
- return if string_ptr.null? # getElementAttribute()
64
-
65
- length_ptr = FFI::MemoryPointer.new :int
66
-
67
- if Lib.wdStringLength(string_ptr, length_ptr) != 0
68
- raise Error::WebDriverError, "cannot determine length of string"
69
- end
70
-
71
- length = length_ptr.get_int(0)
72
- raw_string = wstring_ptr(" "*length)
73
-
74
- if Lib.wdCopyString(string_ptr, length, raw_string) != 0
75
- raise Error::WebDriverError, "cannot copy string from native data to Ruby string"
76
- end
77
-
78
- wstring_to_bytestring raw_string
79
- ensure
80
- Lib.wdFreeString(string_ptr) unless string_ptr.null?
81
- end
82
-
83
- def extract_elements_from(elements_ptr_ref)
84
- elements_ptr = elements_ptr_ref.get_pointer(0)
85
- length_ptr = FFI::MemoryPointer.new :int
86
-
87
- check_error_code Lib.wdcGetElementCollectionLength(elements_ptr, length_ptr),
88
- "Cannot extract elements from collection"
89
-
90
- arr = []
91
-
92
- length_ptr.get_int(0).times do |idx|
93
- arr << create_element do |ptr|
94
- result = Lib.wdcGetElementAtIndex(elements_ptr, idx, ptr)
95
-
96
- if e = WebDriver::Error.for_code(result)
97
- Lib.wdFreeElementCollection(elements_ptr, 1)
98
- raise e, "unable to create element from collection at index #{idx} (#{result})"
99
- end
100
- end
101
- end
102
-
103
- Lib.wdFreeElementCollection(elements_ptr, 0)
104
-
105
- arr
106
- end
107
-
108
- def wstring_ptr(str)
109
- str = str.to_s
110
- size = Kernel32.MultiByteToWideChar(CP_UTF8, 0, str, -1, nil, 0)
111
-
112
- unless size > 0
113
- raise Error::WebDriverError, "unable to convert #{str.inspect} to wchar ptr"
114
- end
115
-
116
- buf = FFI::MemoryPointer.new :pointer, size
117
- Kernel32.MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, size)
118
-
119
- buf
120
- end
121
-
122
- def wstring_to_bytestring(wstring)
123
- size = Kernel32.WideCharToMultiByte(CP_UTF8, 0, wstring, -1, nil, 0, nil, nil)
124
-
125
- unless size > 0
126
- raise Error::WebDriverError, "could not convert wstring pointer to bytestring"
127
- end
128
-
129
- buf = FFI::MemoryPointer.new :pointer, size
130
- Kernel32.WideCharToMultiByte(CP_UTF8, 0, wstring, -1, buf, size, nil, nil )
131
-
132
- buf.get_bytes(0, size - 1)
133
- end
134
-
135
- end # Util
136
- end # IE
137
- end # WebDriver
138
- end # Selenium