selenium-webdriver 3.0.1 → 3.0.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 (36) hide show
  1. data/CHANGES +17 -0
  2. data/lib/selenium/webdriver/chrome.rb +13 -13
  3. data/lib/selenium/webdriver/chrome/bridge.rb +4 -3
  4. data/lib/selenium/webdriver/chrome/service.rb +6 -4
  5. data/lib/selenium/webdriver/common.rb +1 -0
  6. data/lib/selenium/webdriver/common/driver.rb +1 -1
  7. data/lib/selenium/webdriver/common/element.rb +14 -0
  8. data/lib/selenium/webdriver/common/options.rb +12 -10
  9. data/lib/selenium/webdriver/common/port_prober.rb +2 -1
  10. data/lib/selenium/webdriver/common/service.rb +23 -8
  11. data/lib/selenium/webdriver/common/w3c_options.rb +45 -0
  12. data/lib/selenium/webdriver/edge.rb +13 -13
  13. data/lib/selenium/webdriver/edge/bridge.rb +98 -1
  14. data/lib/selenium/webdriver/edge/service.rb +6 -4
  15. data/lib/selenium/webdriver/firefox.rb +13 -13
  16. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  17. data/lib/selenium/webdriver/firefox/service.rb +10 -4
  18. data/lib/selenium/webdriver/firefox/w3c_bridge.rb +2 -1
  19. data/lib/selenium/webdriver/ie.rb +13 -13
  20. data/lib/selenium/webdriver/ie/bridge.rb +3 -1
  21. data/lib/selenium/webdriver/ie/service.rb +6 -4
  22. data/lib/selenium/webdriver/phantomjs.rb +13 -9
  23. data/lib/selenium/webdriver/phantomjs/bridge.rb +2 -1
  24. data/lib/selenium/webdriver/phantomjs/service.rb +2 -4
  25. data/lib/selenium/webdriver/remote/bridge.rb +102 -108
  26. data/lib/selenium/webdriver/remote/commands.rb +188 -185
  27. data/lib/selenium/webdriver/remote/w3c_bridge.rb +75 -94
  28. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +3 -3
  29. data/lib/selenium/webdriver/remote/w3c_commands.rb +108 -104
  30. data/lib/selenium/webdriver/safari.rb +14 -13
  31. data/lib/selenium/webdriver/safari/bridge.rb +2 -1
  32. data/lib/selenium/webdriver/safari/service.rb +16 -4
  33. data/selenium-webdriver.gemspec +1 -1
  34. metadata +3 -4
  35. data/Gemfile.lock +0 -53
  36. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
@@ -76,8 +76,8 @@ module Selenium
76
76
  end
77
77
 
78
78
  def firefox(opts = {})
79
- opts[:browser_version] = opts.delete :version
80
- opts[:platform_name] = opts.delete :platform
79
+ opts[:browser_version] = opts.delete(:version) if opts.key?(:version)
80
+ opts[:platform_name] = opts.delete(:platform) if opts.key?(:platform)
81
81
 
82
82
  new({browser_name: 'firefox'}.merge(opts))
83
83
  end
@@ -85,7 +85,7 @@ module Selenium
85
85
  alias_method :ff, :firefox
86
86
 
87
87
  def w3c?(opts = {})
88
- opts[:marioentte] != false &&
88
+ opts[:marionette] != false &&
89
89
  (!opts[:desired_capabilities] || opts[:desired_capabilities][:marionette] != false)
90
90
  end
91
91
 
@@ -25,110 +25,114 @@ module Selenium
25
25
  # http://www.w3.org/TR/2015/WD-webdriver-20150918/#list-of-endpoints
26
26
  #
27
27
 
28
- #
29
- # session handling
30
- #
31
-
32
- command :newSession, :post, 'session'
33
- command :deleteSession, :delete, 'session/:session_id'
34
-
35
- #
36
- # basic driver
37
- #
38
-
39
- command :get, :post, 'session/:session_id/url'
40
- command :getCurrentUrl, :get, 'session/:session_id/url'
41
- command :back, :post, 'session/:session_id/back'
42
- command :forward, :post, 'session/:session_id/forward'
43
- command :refresh, :post, 'session/:session_id/refresh'
44
- command :getTitle, :get, 'session/:session_id/title'
45
-
46
- #
47
- # window and Frame handling
48
- #
49
-
50
- command :getWindowHandle, :get, 'session/:session_id/window'
51
- command :closeWindow, :delete, 'session/:session_id/window'
52
- command :switchToWindow, :post, 'session/:session_id/window'
53
- command :getWindowHandles, :get, 'session/:session_id/window/handles'
54
- command :fullscreenWindow, :post, 'session/:session_id/window/fullscreen'
55
- command :maximizeWindow, :post, 'session/:session_id/window/maximize'
56
- command :setWindowSize, :post, 'session/:session_id/window/size'
57
- command :getWindowSize, :get, 'session/:session_id/window/size'
58
- command :switchToFrame, :post, 'session/:session_id/frame'
59
- command :switchToParentFrame, :post, 'session/:session_id/frame/parent'
60
-
61
- #
62
- # element
63
- #
64
-
65
- command :findElement, :post, 'session/:session_id/element'
66
- command :findElements, :post, 'session/:session_id/elements'
67
- command :findChildElement, :post, 'session/:session_id/element/:id/element'
68
- command :findChildElements, :post, 'session/:session_id/element/:id/elements'
69
- command :getActiveElement, :get, 'session/:session_id/element/active'
70
- command :isElementSelected, :get, 'session/:session_id/element/:id/selected'
71
- command :getElementAttribute, :get, 'session/:session_id/element/:id/attribute/:name'
72
- command :getElementProperty, :get, 'session/:session_id/element/:id/property/:name'
73
- command :getElementCssValue, :get, 'session/:session_id/element/:id/css/:property_name'
74
- command :getElementText, :get, 'session/:session_id/element/:id/text'
75
- command :getElementTagName, :get, 'session/:session_id/element/:id/name'
76
- command :getElementRect, :get, 'session/:session_id/element/:id/rect'
77
- command :isElementEnabled, :get, 'session/:session_id/element/:id/enabled'
78
-
79
- #
80
- # document handling
81
- #
82
-
83
- command :getPageSource, :get, '/session/:session_id/source'
84
- command :executeScript, :post, 'session/:session_id/execute/sync'
85
- command :executeAsyncScript, :post, 'session/:session_id/execute/async'
86
-
87
- #
88
- # cookies
89
- #
90
-
91
- command :getAllCookies, :get, 'session/:session_id/cookie'
92
- command :getCookie, :get, 'session/:session_id/cookie/:name'
93
- command :addCookie, :post, 'session/:session_id/cookie'
94
- command :deleteCookie, :delete, 'session/:session_id/cookie/:name'
95
-
96
- #
97
- # timeouts
98
- #
99
-
100
- command :setTimeout, :post, 'session/:session_id/timeouts'
101
-
102
- #
103
- # actions
104
- #
105
-
106
- command :actions, :post, 'session/:session_id/actions'
107
-
108
- #
109
- # Element Operations
110
- #
111
-
112
- command :elementClick, :post, 'session/:session_id/element/:id/click'
113
- command :elementTap, :post, 'session/:session_id/element/:id/tap'
114
- command :elementClear, :post, 'session/:session_id/element/:id/clear'
115
- command :elementSendKeys, :post, 'session/:session_id/element/:id/value'
116
-
117
- #
118
- # alerts
119
- #
120
-
121
- command :dismissAlert, :post, 'session/:session_id/alert/dismiss'
122
- command :acceptAlert, :post, 'session/:session_id/alert/accept'
123
- command :getAlertText, :get, 'session/:session_id/alert/text'
124
- command :sendAlertText, :post, 'session/:session_id/alert/text'
125
-
126
- #
127
- # screenshot
128
- #
129
-
130
- command :takeScreenshot, :get, 'session/:session_id/screenshot'
131
- command :takeElementScreenshot, :get, 'session/:session_id/element/:id/screenshot'
28
+ COMMANDS = {
29
+
30
+ #
31
+ # session handling
32
+ #
33
+
34
+ new_session: [:post, 'session'.freeze],
35
+ delete_session: [:delete, 'session/:session_id'.freeze],
36
+
37
+ #
38
+ # basic driver
39
+ #
40
+
41
+ get: [:post, 'session/:session_id/url'.freeze],
42
+ get_current_url: [:get, 'session/:session_id/url'.freeze],
43
+ back: [:post, 'session/:session_id/back'.freeze],
44
+ forward: [:post, 'session/:session_id/forward'.freeze],
45
+ refresh: [:post, 'session/:session_id/refresh'.freeze],
46
+ get_title: [:get, 'session/:session_id/title'.freeze],
47
+
48
+ #
49
+ # window and Frame handling
50
+ #
51
+
52
+ get_window_handle: [:get, 'session/:session_id/window'.freeze],
53
+ close_window: [:delete, 'session/:session_id/window'.freeze],
54
+ switch_to_window: [:post, 'session/:session_id/window'.freeze],
55
+ get_window_handles: [:get, 'session/:session_id/window/handles'.freeze],
56
+ fullscreen_window: [:post, 'session/:session_id/window/fullscreen'.freeze],
57
+ maximize_window: [:post, 'session/:session_id/window/maximize'.freeze],
58
+ set_window_size: [:post, 'session/:session_id/window/size'.freeze],
59
+ get_window_size: [:get, 'session/:session_id/window/size'.freeze],
60
+ switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
61
+ switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],
62
+
63
+ #
64
+ # element
65
+ #
66
+
67
+ find_element: [:post, 'session/:session_id/element'.freeze],
68
+ find_elements: [:post, 'session/:session_id/elements'.freeze],
69
+ find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
70
+ find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
71
+ get_active_element: [:get, 'session/:session_id/element/active'.freeze],
72
+ is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
73
+ get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
74
+ get_element_property: [:get, 'session/:session_id/element/:id/property/:name'.freeze],
75
+ get_element_css_value: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
76
+ get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],
77
+ get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
78
+ get_element_rect: [:get, 'session/:session_id/element/:id/rect'.freeze],
79
+ is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],
80
+
81
+ #
82
+ # document handling
83
+ #
84
+
85
+ get_page_source: [:get, '/session/:session_id/source'.freeze],
86
+ execute_script: [:post, 'session/:session_id/execute/sync'.freeze],
87
+ execute_async_script: [:post, 'session/:session_id/execute/async'.freeze],
88
+
89
+ #
90
+ # cookies
91
+ #
92
+
93
+ get_all_cookies: [:get, 'session/:session_id/cookie'.freeze],
94
+ get_cookie: [:get, 'session/:session_id/cookie/:name'.freeze],
95
+ add_cookie: [:post, 'session/:session_id/cookie'.freeze],
96
+ delete_cookie: [:delete, 'session/:session_id/cookie/:name'.freeze],
97
+ delete_all_cookies: [:delete, 'session/:session_id/cookie'.freeze],
98
+
99
+ #
100
+ # timeouts
101
+ #
102
+
103
+ set_timeout: [:post, 'session/:session_id/timeouts'.freeze],
104
+
105
+ #
106
+ # actions
107
+ #
108
+
109
+ actions: [:post, 'session/:session_id/actions'.freeze],
110
+
111
+ #
112
+ # Element Operations
113
+ #
114
+
115
+ element_click: [:post, 'session/:session_id/element/:id/click'.freeze],
116
+ element_tap: [:post, 'session/:session_id/element/:id/tap'.freeze],
117
+ element_clear: [:post, 'session/:session_id/element/:id/clear'.freeze],
118
+ element_send_keys: [:post, 'session/:session_id/element/:id/value'.freeze],
119
+
120
+ #
121
+ # alerts
122
+ #
123
+
124
+ dismiss_alert: [:post, 'session/:session_id/alert/dismiss'.freeze],
125
+ accept_alert: [:post, 'session/:session_id/alert/accept'.freeze],
126
+ get_alert_text: [:get, 'session/:session_id/alert/text'.freeze],
127
+ send_alert_text: [:post, 'session/:session_id/alert/text'.freeze],
128
+
129
+ #
130
+ # screenshot
131
+ #
132
+
133
+ take_screenshot: [:get, 'session/:session_id/screenshot'.freeze],
134
+ take_element_screenshot: [:get, 'session/:session_id/element/:id/screenshot'.freeze]
135
+ }.freeze
132
136
  end
133
137
  end # Remote
134
138
  end # WebDriver
@@ -23,11 +23,6 @@ require 'pathname'
23
23
  module Selenium
24
24
  module WebDriver
25
25
  module Safari
26
- MISSING_TEXT = <<-ERROR.tr("\n", '').freeze
27
- Unable to find Apple's safaridriver which comes with Safari 10.
28
- More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
29
- ERROR
30
-
31
26
  class << self
32
27
  def path=(path)
33
28
  Platform.assert_executable(path)
@@ -41,19 +36,25 @@ module Selenium
41
36
  raise Error::WebDriverError, 'Unable to find Safari'
42
37
  end
43
38
 
44
- def resource_path
45
- @resource_path ||= Pathname.new(File.expand_path('../safari/resources', __FILE__))
46
- end
47
-
48
39
  def driver_path=(path)
40
+ warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
41
+ [DEPRECATION] `driver_path=` is deprecated. Pass the driver path as an option instead.
42
+ e.g. Selenium::WebDriver.for :safari, driver_path: '/path'
43
+ DEPRECATE
44
+
49
45
  Platform.assert_executable path
50
46
  @driver_path = path
51
47
  end
52
48
 
53
- def driver_path
54
- @driver_path ||= '/usr/bin/safaridriver'
55
- return @driver_path if File.file?(@driver_path) && File.executable?(@driver_path)
56
- raise Error::WebDriverError, MISSING_TEXT
49
+ def driver_path(warning = true)
50
+ if warning
51
+ warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
52
+ [DEPRECATION] `driver_path` is deprecated. Pass the driver path as an option instead.
53
+ e.g. Selenium::WebDriver.for :safari, driver_path: '/path'
54
+ DEPRECATE
55
+ end
56
+
57
+ @driver_path ||= nil
57
58
  end
58
59
  end
59
60
  end # Safari
@@ -27,7 +27,8 @@ module Selenium
27
27
  port = opts.delete(:port) || Service::DEFAULT_PORT
28
28
  service_args = opts.delete(:service_args) || {}
29
29
 
30
- @service = Service.new(Safari.driver_path, port, *extract_service_args(service_args))
30
+ driver_path = opts.delete(:driver_path) || Safari.driver_path(false)
31
+ @service = Service.new(driver_path, port, *extract_service_args(service_args))
31
32
  @service.start
32
33
  opts[:url] = @service.uri
33
34
 
@@ -26,9 +26,25 @@ module Selenium
26
26
 
27
27
  class Service < WebDriver::Service
28
28
  DEFAULT_PORT = 7050
29
+ @executable = '/usr/bin/safaridriver'.freeze
30
+ @missing_text = <<-ERROR.gsub(/\n +| {2,}/, ' ').freeze
31
+ Unable to find Apple's safaridriver which comes with Safari 10.
32
+ More info at https://webkit.org/blog/6900/webdriver-support-in-safari-10/
33
+ ERROR
34
+
35
+ def stop
36
+ stop_process
37
+ end
29
38
 
30
39
  private
31
40
 
41
+ def binary_path(path)
42
+ path = self.class.executable if path.nil?
43
+ raise Error::WebDriverError, self.class.missing_text unless path
44
+ Platform.assert_executable path
45
+ path
46
+ end
47
+
32
48
  def start_process
33
49
  server_command = [@executable_path, "--port=#{@port}", *@extra_args]
34
50
  @process = ChildProcess.build(*server_command)
@@ -37,10 +53,6 @@ module Selenium
37
53
  @process.start
38
54
  end
39
55
 
40
- def stop_server
41
- connect_to_server { |http| http.head('/shutdown') }
42
- end
43
-
44
56
  def cannot_connect_error_text
45
57
  "unable to connect to safaridriver #{@host}:#{@port}"
46
58
  end
@@ -5,7 +5,7 @@ raise "cwd must be #{root} when reading gemspec" if root != Dir.pwd
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'selenium-webdriver'
8
- s.version = '3.0.1'
8
+ s.version = '3.0.2'
9
9
 
10
10
  s.authors = ['Alex Rodionov', 'Titus Fortner']
11
11
  s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com']
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.0.1
5
+ version: 3.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alex Rodionov
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2016-11-07 00:00:00 -06:00
14
+ date: 2016-11-25 00:00:00 -06:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -124,7 +124,6 @@ extra_rdoc_files: []
124
124
  files:
125
125
  - CHANGES
126
126
  - Gemfile
127
- - Gemfile.lock
128
127
  - LICENSE
129
128
  - README.md
130
129
  - selenium-webdriver.gemspec
@@ -172,6 +171,7 @@ files:
172
171
  - lib/selenium/webdriver/common/touch_action_builder.rb
173
172
  - lib/selenium/webdriver/common/touch_screen.rb
174
173
  - lib/selenium/webdriver/common/w3c_error.rb
174
+ - lib/selenium/webdriver/common/w3c_options.rb
175
175
  - lib/selenium/webdriver/common/wait.rb
176
176
  - lib/selenium/webdriver/common/window.rb
177
177
  - lib/selenium/webdriver/common/zipper.rb
@@ -189,7 +189,6 @@ files:
189
189
  - lib/selenium/webdriver/common/html5/session_storage.rb
190
190
  - lib/selenium/webdriver/common/html5/shared_web_storage.rb
191
191
  - lib/selenium/webdriver/edge/bridge.rb
192
- - lib/selenium/webdriver/edge/legacy_support.rb
193
192
  - lib/selenium/webdriver/edge/service.rb
194
193
  - lib/selenium/webdriver/firefox/binary.rb
195
194
  - lib/selenium/webdriver/firefox/bridge.rb
@@ -1,53 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- selenium-webdriver (3.0.1)
5
- childprocess (~> 0.5)
6
- rubyzip (~> 1.0)
7
- websocket (~> 1.0)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- addressable (2.4.0)
13
- builder (3.2.2)
14
- childprocess (0.5.9)
15
- ffi (~> 1.0, >= 1.0.11)
16
- ci_reporter (1.9.3)
17
- builder (>= 2.1.2)
18
- crack (0.4.3)
19
- safe_yaml (~> 1.0.0)
20
- diff-lcs (1.2.5)
21
- ffi (1.9.14)
22
- hashdiff (0.3.0)
23
- rack (1.6.4)
24
- rspec (2.99.0)
25
- rspec-core (~> 2.99.0)
26
- rspec-expectations (~> 2.99.0)
27
- rspec-mocks (~> 2.99.0)
28
- rspec-core (2.99.2)
29
- rspec-expectations (2.99.2)
30
- diff-lcs (>= 1.1.3, < 2.0)
31
- rspec-mocks (2.99.4)
32
- rubyzip (1.2.0)
33
- safe_yaml (1.0.4)
34
- webmock (1.24.6)
35
- addressable (>= 2.3.6)
36
- crack (>= 0.3.2)
37
- hashdiff
38
- websocket (1.2.3)
39
- yard (0.8.7.6)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- ci_reporter (~> 1.6, >= 1.6.2)
46
- rack (~> 1.0)
47
- rspec (~> 2.99.0)
48
- selenium-webdriver!
49
- webmock (~> 1.7, >= 1.7.5)
50
- yard (~> 0.8.7)
51
-
52
- BUNDLED WITH
53
- 1.13.6
@@ -1,117 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # Licensed to the Software Freedom Conservancy (SFC) under one
4
- # or more contributor license agreements. See the NOTICE file
5
- # distributed with this work for additional information
6
- # regarding copyright ownership. The SFC licenses this file
7
- # to you under the Apache License, Version 2.0 (the
8
- # "License"); you may not use this file except in compliance
9
- # with the License. You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing,
14
- # software distributed under the License is distributed on an
15
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
- # KIND, either express or implied. See the License for the
17
- # specific language governing permissions and limitations
18
- # under the License.
19
-
20
- module Selenium
21
- module WebDriver
22
- module Edge
23
- module LegacySupport
24
- # These are commands Edge is still using from JSON Wire Protocol
25
- %i[executeScript executeAsyncScript submitElement doubleClick
26
- mouseDown mouseUp mouseMoveTo click
27
- sendKeysToActiveElement getWindowHandles getCurrentWindowHandle
28
- getWindowSize setWindowSize getWindowPosition setWindowPosition
29
- maximizeWindow getAlertText acceptAlert dismissAlert].each do |cmd|
30
- jwp = Remote::Bridge::COMMANDS[cmd]
31
- Remote::W3CBridge.command(cmd, jwp.first, jwp.last)
32
- end
33
-
34
- def execute_script(script, *args)
35
- result = execute :executeScript, {}, {script: script, args: args}
36
- unwrap_script_result result
37
- end
38
-
39
- def execute_async_script(script, *args)
40
- result = execute :executeAsyncScript, {}, {script: script, args: args}
41
- unwrap_script_result result
42
- end
43
-
44
- def submit_element(element)
45
- execute :submitElement, id: element['ELEMENT']
46
- end
47
-
48
- def double_click
49
- execute :doubleClick
50
- end
51
-
52
- def click
53
- execute :click, {}, {button: 0}
54
- end
55
-
56
- def context_click
57
- execute :click, {}, {button: 2}
58
- end
59
-
60
- def mouse_down
61
- execute :mouseDown
62
- end
63
-
64
- def mouse_up
65
- execute :mouseUp
66
- end
67
-
68
- def mouse_move_to(element, x = nil, y = nil)
69
- element_id = element['ELEMENT'] if element
70
- params = {element: element_id}
71
-
72
- if x && y
73
- params[:xoffset] = x
74
- params[:yoffset] = y
75
- end
76
-
77
- execute :mouseMoveTo, {}, params
78
- end
79
-
80
- def send_keys_to_active_element(key)
81
- execute :sendKeysToActiveElement, {}, {value: key}
82
- end
83
-
84
- def window_handle
85
- execute :getCurrentWindowHandle
86
- end
87
-
88
- def window_size(handle = :current)
89
- data = execute :getWindowSize, window_handle: handle
90
-
91
- Dimension.new data['width'], data['height']
92
- end
93
-
94
- def resize_window(width, height, handle = :current)
95
- execute :setWindowSize, {window_handle: handle},
96
- {width: width,
97
- height: height}
98
- end
99
-
100
- def window_position(handle = :current)
101
- data = execute :getWindowPosition, window_handle: handle
102
-
103
- Point.new data['x'], data['y']
104
- end
105
-
106
- def reposition_window(x, y, handle = :current)
107
- execute :setWindowPosition, {window_handle: handle},
108
- {x: x, y: y}
109
- end
110
-
111
- def maximize_window(handle = :current)
112
- execute :maximizeWindow, window_handle: handle
113
- end
114
- end # LegacySupport
115
- end # Edge
116
- end # WebDriver
117
- end # Selenium