selenium-webdriver 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
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