selenium-webdriver 3.141.0 → 3.141.592

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +78 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/lib/selenium-webdriver.rb +2 -0
  6. data/lib/selenium/server.rb +9 -7
  7. data/lib/selenium/webdriver.rb +3 -1
  8. data/lib/selenium/webdriver/atoms.rb +20 -1
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +6 -7
  10. data/lib/selenium/webdriver/atoms/isDisplayed.js +60 -59
  11. data/lib/selenium/webdriver/chrome.rb +10 -4
  12. data/lib/selenium/webdriver/chrome/bridge.rb +5 -3
  13. data/lib/selenium/webdriver/chrome/driver.rb +10 -13
  14. data/lib/selenium/webdriver/chrome/options.rb +4 -4
  15. data/lib/selenium/webdriver/chrome/profile.rb +4 -3
  16. data/lib/selenium/webdriver/chrome/service.rb +13 -13
  17. data/lib/selenium/webdriver/common.rb +4 -2
  18. data/lib/selenium/webdriver/common/action_builder.rb +2 -0
  19. data/lib/selenium/webdriver/common/alert.rb +2 -0
  20. data/lib/selenium/webdriver/common/bridge_helper.rb +8 -5
  21. data/lib/selenium/webdriver/common/driver.rb +22 -7
  22. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +2 -0
  23. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +2 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +2 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -3
  26. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +2 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -1
  28. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +2 -0
  29. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -0
  30. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +2 -0
  32. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -0
  33. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +3 -1
  34. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -0
  35. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -3
  36. data/lib/selenium/webdriver/common/element.rb +3 -1
  37. data/lib/selenium/webdriver/common/error.rb +74 -18
  38. data/lib/selenium/webdriver/common/file_reaper.rb +3 -3
  39. data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -0
  40. data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -0
  41. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +4 -1
  42. data/lib/selenium/webdriver/common/interactions/input_device.rb +3 -0
  43. data/lib/selenium/webdriver/common/interactions/interaction.rb +3 -0
  44. data/lib/selenium/webdriver/common/interactions/interactions.rb +3 -1
  45. data/lib/selenium/webdriver/common/interactions/key_actions.rb +2 -0
  46. data/lib/selenium/webdriver/common/interactions/key_input.rb +4 -0
  47. data/lib/selenium/webdriver/common/interactions/none_input.rb +3 -0
  48. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +2 -0
  49. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +7 -0
  50. data/lib/selenium/webdriver/common/keyboard.rb +4 -1
  51. data/lib/selenium/webdriver/common/keys.rb +3 -0
  52. data/lib/selenium/webdriver/common/log_entry.rb +4 -2
  53. data/lib/selenium/webdriver/common/logger.rb +15 -40
  54. data/lib/selenium/webdriver/common/logs.rb +2 -0
  55. data/lib/selenium/webdriver/common/manager.rb +177 -0
  56. data/lib/selenium/webdriver/common/mouse.rb +3 -0
  57. data/lib/selenium/webdriver/common/navigation.rb +2 -0
  58. data/lib/selenium/webdriver/common/options.rb +26 -0
  59. data/lib/selenium/webdriver/common/platform.rb +26 -30
  60. data/lib/selenium/webdriver/common/port_prober.rb +6 -19
  61. data/lib/selenium/webdriver/common/profile_helper.rb +2 -0
  62. data/lib/selenium/webdriver/common/proxy.rb +13 -5
  63. data/lib/selenium/webdriver/common/search_context.rb +4 -6
  64. data/lib/selenium/webdriver/common/service.rb +74 -29
  65. data/lib/selenium/webdriver/common/socket_lock.rb +10 -3
  66. data/lib/selenium/webdriver/common/socket_poller.rb +45 -48
  67. data/lib/selenium/webdriver/common/target_locator.rb +6 -4
  68. data/lib/selenium/webdriver/common/timeouts.rb +2 -0
  69. data/lib/selenium/webdriver/common/touch_action_builder.rb +5 -6
  70. data/lib/selenium/webdriver/common/touch_screen.rb +4 -1
  71. data/lib/selenium/webdriver/common/w3c_action_builder.rb +3 -0
  72. data/lib/selenium/webdriver/common/w3c_manager.rb +45 -0
  73. data/lib/selenium/webdriver/common/w3c_options.rb +2 -0
  74. data/lib/selenium/webdriver/common/wait.rb +11 -3
  75. data/lib/selenium/webdriver/common/window.rb +2 -0
  76. data/lib/selenium/webdriver/common/zipper.rb +3 -3
  77. data/lib/selenium/webdriver/edge.rb +11 -5
  78. data/lib/selenium/webdriver/edge/bridge.rb +2 -0
  79. data/lib/selenium/webdriver/edge/driver.rb +5 -12
  80. data/lib/selenium/webdriver/edge/options.rb +3 -0
  81. data/lib/selenium/webdriver/edge/service.rb +8 -12
  82. data/lib/selenium/webdriver/firefox.rb +10 -4
  83. data/lib/selenium/webdriver/firefox/binary.rb +7 -6
  84. data/lib/selenium/webdriver/firefox/bridge.rb +47 -0
  85. data/lib/selenium/webdriver/firefox/driver.rb +3 -2
  86. data/lib/selenium/webdriver/firefox/extension.rb +4 -4
  87. data/lib/selenium/webdriver/firefox/launcher.rb +3 -0
  88. data/lib/selenium/webdriver/firefox/legacy/driver.rb +7 -3
  89. data/lib/selenium/webdriver/firefox/marionette/bridge.rb +4 -2
  90. data/lib/selenium/webdriver/firefox/marionette/driver.rb +5 -11
  91. data/lib/selenium/webdriver/firefox/options.rb +3 -1
  92. data/lib/selenium/webdriver/firefox/profile.rb +7 -8
  93. data/lib/selenium/webdriver/firefox/profiles_ini.rb +3 -0
  94. data/lib/selenium/webdriver/firefox/service.rb +8 -19
  95. data/lib/selenium/webdriver/firefox/util.rb +2 -0
  96. data/lib/selenium/webdriver/ie.rb +10 -4
  97. data/lib/selenium/webdriver/ie/driver.rb +4 -10
  98. data/lib/selenium/webdriver/ie/options.rb +4 -2
  99. data/lib/selenium/webdriver/ie/service.rb +8 -12
  100. data/lib/selenium/webdriver/remote.rb +2 -0
  101. data/lib/selenium/webdriver/remote/bridge.rb +6 -4
  102. data/lib/selenium/webdriver/remote/capabilities.rb +23 -10
  103. data/lib/selenium/webdriver/remote/commands.rb +156 -0
  104. data/lib/selenium/webdriver/remote/driver.rb +2 -0
  105. data/lib/selenium/webdriver/remote/http/common.rb +11 -4
  106. data/lib/selenium/webdriver/remote/http/curb.rb +4 -2
  107. data/lib/selenium/webdriver/remote/http/default.rb +31 -25
  108. data/lib/selenium/webdriver/remote/http/persistent.rb +3 -1
  109. data/lib/selenium/webdriver/remote/oss/bridge.rb +5 -2
  110. data/lib/selenium/webdriver/remote/oss/commands.rb +106 -104
  111. data/lib/selenium/webdriver/remote/response.rb +10 -4
  112. data/lib/selenium/webdriver/remote/server_error.rb +2 -0
  113. data/lib/selenium/webdriver/remote/w3c/bridge.rb +28 -13
  114. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +37 -21
  115. data/lib/selenium/webdriver/remote/w3c/commands.rb +61 -58
  116. data/lib/selenium/webdriver/safari.rb +11 -4
  117. data/lib/selenium/webdriver/safari/bridge.rb +5 -3
  118. data/lib/selenium/webdriver/safari/driver.rb +8 -10
  119. data/lib/selenium/webdriver/safari/options.rb +2 -0
  120. data/lib/selenium/webdriver/safari/service.rb +6 -25
  121. data/lib/selenium/webdriver/support.rb +2 -0
  122. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -0
  123. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -1
  124. data/lib/selenium/webdriver/support/color.rb +11 -9
  125. data/lib/selenium/webdriver/support/escaper.rb +2 -0
  126. data/lib/selenium/webdriver/support/event_firing_bridge.rb +3 -1
  127. data/lib/selenium/webdriver/support/select.rb +19 -18
  128. data/lib/selenium/webdriver/version.rb +3 -1
  129. data/selenium-webdriver.gemspec +14 -7
  130. metadata +89 -21
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -48,22 +50,26 @@ module Selenium
48
50
  self.read_timeout = value
49
51
  end
50
52
 
53
+ def close
54
+ @http&.finish
55
+ end
56
+
51
57
  private
52
58
 
53
59
  def http
54
- @http ||= (
55
- http = new_http_client
56
- if server_url.scheme == 'https'
57
- http.use_ssl = true
58
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
59
- end
60
+ @http ||= begin
61
+ http = new_http_client
62
+ if server_url.scheme == 'https'
63
+ http.use_ssl = true
64
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
65
+ end
60
66
 
61
- # Defaulting open_timeout to nil to be consistent with Ruby 2.2 and earlier.
62
- http.open_timeout = self.open_timeout
63
- http.read_timeout = self.read_timeout if self.read_timeout
67
+ # Defaulting open_timeout to nil to be consistent with Ruby 2.2 and earlier.
68
+ http.open_timeout = open_timeout
69
+ http.read_timeout = read_timeout if read_timeout
64
70
 
65
- http
66
- )
71
+ http.start
72
+ end
67
73
  end
68
74
 
69
75
  MAX_RETRIES = 3
@@ -83,22 +89,26 @@ module Selenium
83
89
  #
84
90
  # http://msdn.microsoft.com/en-us/library/aa560610%28v=bts.20%29.aspx
85
91
  raise if retries >= MAX_RETRIES
92
+
86
93
  retries += 1
87
94
  sleep 2
88
95
  retry
89
96
  rescue Errno::EADDRNOTAVAIL => ex
90
97
  # a retry is sometimes needed when the port becomes temporarily unavailable
91
98
  raise if retries >= MAX_RETRIES
99
+
92
100
  retries += 1
93
101
  sleep 2
94
102
  retry
95
103
  rescue Errno::ECONNREFUSED => ex
96
104
  raise ex.class, "using proxy: #{proxy.http}" if use_proxy?
105
+
97
106
  raise
98
107
  end
99
108
 
100
109
  if response.is_a? Net::HTTPRedirection
101
110
  raise Error::WebDriverError, 'too many redirects' if redirects >= MAX_REDIRECTS
111
+
102
112
  request(:get, URI.parse(response['Location']), DEFAULT_HEADERS.dup, nil, redirects + 1)
103
113
  else
104
114
  create_response response.code, response.body, response.content_type
@@ -108,9 +118,7 @@ module Selenium
108
118
  def new_request_for(verb, url, headers, payload)
109
119
  req = Net::HTTP.const_get(verb.to_s.capitalize).new(url.path, headers)
110
120
 
111
- if server_url.userinfo
112
- req.basic_auth server_url.user, server_url.password
113
- end
121
+ req.basic_auth server_url.user, server_url.password if server_url.userinfo
114
122
 
115
123
  req.body = payload if payload
116
124
 
@@ -124,9 +132,7 @@ module Selenium
124
132
  def new_http_client
125
133
  if use_proxy?
126
134
  url = @proxy.http
127
- unless proxy.respond_to?(:http) && url
128
- raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}"
129
- end
135
+ raise Error::WebDriverError, "expected HTTP proxy, got #{@proxy.inspect}" unless proxy.respond_to?(:http) && url
130
136
 
131
137
  proxy = URI.parse(url)
132
138
 
@@ -138,15 +144,15 @@ module Selenium
138
144
  end
139
145
 
140
146
  def proxy
141
- @proxy ||= (
142
- proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
143
- no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
147
+ @proxy ||= begin
148
+ proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
149
+ no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
144
150
 
145
- if proxy
146
- proxy = "http://#{proxy}" unless proxy.start_with?('http://')
147
- Proxy.new(http: proxy, no_proxy: no_proxy)
151
+ if proxy
152
+ proxy = "http://#{proxy}" unless proxy.start_with?('http://')
153
+ Proxy.new(http: proxy, no_proxy: no_proxy)
154
+ end
148
155
  end
149
- )
150
156
  end
151
157
 
152
158
  def use_proxy?
@@ -161,7 +167,7 @@ module Selenium
161
167
  rescue ArgumentError
162
168
  false
163
169
  end
164
- )
170
+ )
165
171
  end
166
172
 
167
173
  !ignored
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -24,7 +26,7 @@ module Selenium
24
26
  # @api private
25
27
  class Persistent < Default
26
28
  def close
27
- @http.shutdown if @http
29
+ @http&.shutdown
28
30
  end
29
31
 
30
32
  private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -279,8 +281,8 @@ module Selenium
279
281
  # cookies
280
282
  #
281
283
 
282
- def options
283
- @options ||= WebDriver::Options.new(self)
284
+ def manage
285
+ @manage ||= WebDriver::Manager.new(self)
284
286
  end
285
287
 
286
288
  def add_cookie(cookie)
@@ -571,6 +573,7 @@ module Selenium
571
573
 
572
574
  def assert_javascript_enabled
573
575
  return if capabilities.javascript_enabled?
576
+
574
577
  raise Error::UnsupportedOperationError, 'underlying webdriver instance does not support javascript'
575
578
  end
576
579
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
2
4
  # or more contributor license agreements. See the NOTICE file
3
5
  # distributed with this work for additional information
@@ -28,190 +30,190 @@ module Selenium
28
30
  class Bridge
29
31
 
30
32
  COMMANDS = {
31
- get_capabilities: [:get, 'session/:session_id'.freeze],
32
- status: [:get, 'status'.freeze],
33
+ get_capabilities: [:get, 'session/:session_id'],
34
+ status: [:get, 'status'],
33
35
 
34
36
  #
35
37
  # basic driver
36
38
  #
37
39
 
38
- get_current_url: [:get, 'session/:session_id/url'.freeze],
39
- get: [:post, 'session/:session_id/url'.freeze],
40
- go_forward: [:post, 'session/:session_id/forward'.freeze],
41
- go_back: [:post, 'session/:session_id/back'.freeze],
42
- refresh: [:post, 'session/:session_id/refresh'.freeze],
43
- quit: [:delete, 'session/:session_id'.freeze],
44
- close: [:delete, 'session/:session_id/window'.freeze],
45
- get_page_source: [:get, 'session/:session_id/source'.freeze],
46
- get_title: [:get, 'session/:session_id/title'.freeze],
47
- find_element: [:post, 'session/:session_id/element'.freeze],
48
- find_elements: [:post, 'session/:session_id/elements'.freeze],
49
- get_active_element: [:post, 'session/:session_id/element/active'.freeze],
40
+ get_current_url: [:get, 'session/:session_id/url'],
41
+ get: [:post, 'session/:session_id/url'],
42
+ go_forward: [:post, 'session/:session_id/forward'],
43
+ go_back: [:post, 'session/:session_id/back'],
44
+ refresh: [:post, 'session/:session_id/refresh'],
45
+ quit: [:delete, 'session/:session_id'],
46
+ close: [:delete, 'session/:session_id/window'],
47
+ get_page_source: [:get, 'session/:session_id/source'],
48
+ get_title: [:get, 'session/:session_id/title'],
49
+ find_element: [:post, 'session/:session_id/element'],
50
+ find_elements: [:post, 'session/:session_id/elements'],
51
+ get_active_element: [:post, 'session/:session_id/element/active'],
50
52
 
51
53
  #
52
54
  # window handling
53
55
  #
54
56
 
55
- get_current_window_handle: [:get, 'session/:session_id/window_handle'.freeze],
56
- get_window_handles: [:get, 'session/:session_id/window_handles'.freeze],
57
- set_window_size: [:post, 'session/:session_id/window/:window_handle/size'.freeze],
58
- set_window_position: [:post, 'session/:session_id/window/:window_handle/position'.freeze],
59
- get_window_size: [:get, 'session/:session_id/window/:window_handle/size'.freeze],
60
- get_window_position: [:get, 'session/:session_id/window/:window_handle/position'.freeze],
61
- maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'.freeze],
57
+ get_current_window_handle: [:get, 'session/:session_id/window_handle'],
58
+ get_window_handles: [:get, 'session/:session_id/window_handles'],
59
+ set_window_size: [:post, 'session/:session_id/window/:window_handle/size'],
60
+ set_window_position: [:post, 'session/:session_id/window/:window_handle/position'],
61
+ get_window_size: [:get, 'session/:session_id/window/:window_handle/size'],
62
+ get_window_position: [:get, 'session/:session_id/window/:window_handle/position'],
63
+ maximize_window: [:post, 'session/:session_id/window/:window_handle/maximize'],
62
64
 
63
65
  #
64
66
  # script execution
65
67
  #
66
68
 
67
- execute_script: [:post, 'session/:session_id/execute'.freeze],
68
- execute_async_script: [:post, 'session/:session_id/execute_async'.freeze],
69
+ execute_script: [:post, 'session/:session_id/execute'],
70
+ execute_async_script: [:post, 'session/:session_id/execute_async'],
69
71
 
70
72
  #
71
73
  # screenshot
72
74
  #
73
75
 
74
- screenshot: [:get, 'session/:session_id/screenshot'.freeze],
76
+ screenshot: [:get, 'session/:session_id/screenshot'],
75
77
 
76
78
  #
77
79
  # alerts
78
80
  #
79
81
 
80
- dismiss_alert: [:post, 'session/:session_id/dismiss_alert'.freeze],
81
- accept_alert: [:post, 'session/:session_id/accept_alert'.freeze],
82
- get_alert_text: [:get, 'session/:session_id/alert_text'.freeze],
83
- set_alert_value: [:post, 'session/:session_id/alert_text'.freeze],
84
- set_authentication: [:post, 'session/:session_id/alert/credentials'.freeze],
82
+ dismiss_alert: [:post, 'session/:session_id/dismiss_alert'],
83
+ accept_alert: [:post, 'session/:session_id/accept_alert'],
84
+ get_alert_text: [:get, 'session/:session_id/alert_text'],
85
+ set_alert_value: [:post, 'session/:session_id/alert_text'],
86
+ set_authentication: [:post, 'session/:session_id/alert/credentials'],
85
87
 
86
88
  #
87
89
  # target locator
88
90
  #
89
91
 
90
- switch_to_frame: [:post, 'session/:session_id/frame'.freeze],
91
- switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'.freeze],
92
- switch_to_window: [:post, 'session/:session_id/window'.freeze],
92
+ switch_to_frame: [:post, 'session/:session_id/frame'],
93
+ switch_to_parent_frame: [:post, 'session/:session_id/frame/parent'],
94
+ switch_to_window: [:post, 'session/:session_id/window'],
93
95
 
94
96
  #
95
97
  # options
96
98
  #
97
99
 
98
- get_cookies: [:get, 'session/:session_id/cookie'.freeze],
99
- add_cookie: [:post, 'session/:session_id/cookie'.freeze],
100
- delete_all_cookies: [:delete, 'session/:session_id/cookie'.freeze],
101
- delete_cookie: [:delete, 'session/:session_id/cookie/:name'.freeze],
100
+ get_cookies: [:get, 'session/:session_id/cookie'],
101
+ add_cookie: [:post, 'session/:session_id/cookie'],
102
+ delete_all_cookies: [:delete, 'session/:session_id/cookie'],
103
+ delete_cookie: [:delete, 'session/:session_id/cookie/:name'],
102
104
 
103
105
  #
104
106
  # timeouts
105
107
  #
106
108
 
107
- implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'.freeze],
108
- set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'.freeze],
109
- set_timeout: [:post, 'session/:session_id/timeouts'.freeze],
109
+ implicitly_wait: [:post, 'session/:session_id/timeouts/implicit_wait'],
110
+ set_script_timeout: [:post, 'session/:session_id/timeouts/async_script'],
111
+ set_timeout: [:post, 'session/:session_id/timeouts'],
110
112
 
111
113
  #
112
114
  # element
113
115
  #
114
116
 
115
- describe_element: [:get, 'session/:session_id/element/:id'.freeze],
116
- find_child_element: [:post, 'session/:session_id/element/:id/element'.freeze],
117
- find_child_elements: [:post, 'session/:session_id/element/:id/elements'.freeze],
118
- click_element: [:post, 'session/:session_id/element/:id/click'.freeze],
119
- submit_element: [:post, 'session/:session_id/element/:id/submit'.freeze],
120
- get_element_value: [:get, 'session/:session_id/element/:id/value'.freeze],
121
- send_keys_to_element: [:post, 'session/:session_id/element/:id/value'.freeze],
122
- upload_file: [:post, 'session/:session_id/file'.freeze],
123
- get_element_tag_name: [:get, 'session/:session_id/element/:id/name'.freeze],
124
- clear_element: [:post, 'session/:session_id/element/:id/clear'.freeze],
125
- is_element_selected: [:get, 'session/:session_id/element/:id/selected'.freeze],
126
- is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'.freeze],
127
- get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'.freeze],
128
- element_equals: [:get, 'session/:session_id/element/:id/equals/:other'.freeze],
129
- is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'.freeze],
130
- get_element_location: [:get, 'session/:session_id/element/:id/location'.freeze],
131
- get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'.freeze],
132
- get_element_size: [:get, 'session/:session_id/element/:id/size'.freeze],
133
- drag_element: [:post, 'session/:session_id/element/:id/drag'.freeze],
134
- get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'.freeze],
135
- get_element_text: [:get, 'session/:session_id/element/:id/text'.freeze],
117
+ describe_element: [:get, 'session/:session_id/element/:id'],
118
+ find_child_element: [:post, 'session/:session_id/element/:id/element'],
119
+ find_child_elements: [:post, 'session/:session_id/element/:id/elements'],
120
+ click_element: [:post, 'session/:session_id/element/:id/click'],
121
+ submit_element: [:post, 'session/:session_id/element/:id/submit'],
122
+ get_element_value: [:get, 'session/:session_id/element/:id/value'],
123
+ send_keys_to_element: [:post, 'session/:session_id/element/:id/value'],
124
+ upload_file: [:post, 'session/:session_id/file'],
125
+ get_element_tag_name: [:get, 'session/:session_id/element/:id/name'],
126
+ clear_element: [:post, 'session/:session_id/element/:id/clear'],
127
+ is_element_selected: [:get, 'session/:session_id/element/:id/selected'],
128
+ is_element_enabled: [:get, 'session/:session_id/element/:id/enabled'],
129
+ get_element_attribute: [:get, 'session/:session_id/element/:id/attribute/:name'],
130
+ element_equals: [:get, 'session/:session_id/element/:id/equals/:other'],
131
+ is_element_displayed: [:get, 'session/:session_id/element/:id/displayed'],
132
+ get_element_location: [:get, 'session/:session_id/element/:id/location'],
133
+ get_element_location_once_scrolled_into_view: [:get, 'session/:session_id/element/:id/location_in_view'],
134
+ get_element_size: [:get, 'session/:session_id/element/:id/size'],
135
+ drag_element: [:post, 'session/:session_id/element/:id/drag'],
136
+ get_element_value_of_css_property: [:get, 'session/:session_id/element/:id/css/:property_name'],
137
+ get_element_text: [:get, 'session/:session_id/element/:id/text'],
136
138
 
137
139
  #
138
140
  # rotatable
139
141
  #
140
142
 
141
- get_screen_orientation: [:get, 'session/:session_id/orientation'.freeze],
142
- set_screen_orientation: [:post, 'session/:session_id/orientation'.freeze],
143
+ get_screen_orientation: [:get, 'session/:session_id/orientation'],
144
+ set_screen_orientation: [:post, 'session/:session_id/orientation'],
143
145
 
144
146
  #
145
147
  # interactions API
146
148
  #
147
149
 
148
- click: [:post, 'session/:session_id/click'.freeze],
149
- double_click: [:post, 'session/:session_id/doubleclick'.freeze],
150
- mouse_down: [:post, 'session/:session_id/buttondown'.freeze],
151
- mouse_up: [:post, 'session/:session_id/buttonup'.freeze],
152
- mouse_move_to: [:post, 'session/:session_id/moveto'.freeze],
153
- send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'.freeze],
154
- send_keys_to_active_element: [:post, 'session/:session_id/keys'.freeze],
150
+ click: [:post, 'session/:session_id/click'],
151
+ double_click: [:post, 'session/:session_id/doubleclick'],
152
+ mouse_down: [:post, 'session/:session_id/buttondown'],
153
+ mouse_up: [:post, 'session/:session_id/buttonup'],
154
+ mouse_move_to: [:post, 'session/:session_id/moveto'],
155
+ send_modifier_key_to_active_element: [:post, 'session/:session_id/modifier'],
156
+ send_keys_to_active_element: [:post, 'session/:session_id/keys'],
155
157
 
156
158
  #
157
159
  # html 5
158
160
  #
159
161
 
160
- execute_sql: [:post, 'session/:session_id/execute_sql'.freeze],
162
+ execute_sql: [:post, 'session/:session_id/execute_sql'],
161
163
 
162
- get_location: [:get, 'session/:session_id/location'.freeze],
163
- set_location: [:post, 'session/:session_id/location'.freeze],
164
+ get_location: [:get, 'session/:session_id/location'],
165
+ set_location: [:post, 'session/:session_id/location'],
164
166
 
165
- get_app_cache: [:get, 'session/:session_id/application_cache'.freeze],
166
- get_app_cache_status: [:get, 'session/:session_id/application_cache/status'.freeze],
167
- clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'.freeze],
167
+ get_app_cache: [:get, 'session/:session_id/application_cache'],
168
+ get_app_cache_status: [:get, 'session/:session_id/application_cache/status'],
169
+ clear_app_cache: [:delete, 'session/:session_id/application_cache/clear'],
168
170
 
169
- get_network_connection: [:get, 'session/:session_id/network_connection'.freeze],
170
- set_network_connection: [:post, 'session/:session_id/network_connection'.freeze],
171
+ get_network_connection: [:get, 'session/:session_id/network_connection'],
172
+ set_network_connection: [:post, 'session/:session_id/network_connection'],
171
173
 
172
- get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'.freeze],
173
- remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'.freeze],
174
- get_local_storage_keys: [:get, 'session/:session_id/local_storage'.freeze],
175
- set_local_storage_item: [:post, 'session/:session_id/local_storage'.freeze],
176
- clear_local_storage: [:delete, 'session/:session_id/local_storage'.freeze],
177
- get_local_storage_size: [:get, 'session/:session_id/local_storage/size'.freeze],
174
+ get_local_storage_item: [:get, 'session/:session_id/local_storage/key/:key'],
175
+ remove_local_storage_item: [:delete, 'session/:session_id/local_storage/key/:key'],
176
+ get_local_storage_keys: [:get, 'session/:session_id/local_storage'],
177
+ set_local_storage_item: [:post, 'session/:session_id/local_storage'],
178
+ clear_local_storage: [:delete, 'session/:session_id/local_storage'],
179
+ get_local_storage_size: [:get, 'session/:session_id/local_storage/size'],
178
180
 
179
- get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'.freeze],
180
- remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'.freeze],
181
- get_session_storage_keys: [:get, 'session/:session_id/session_storage'.freeze],
182
- set_session_storage_item: [:post, 'session/:session_id/session_storage'.freeze],
183
- clear_session_storage: [:delete, 'session/:session_id/session_storage'.freeze],
184
- get_session_storage_size: [:get, 'session/:session_id/session_storage/size'.freeze],
181
+ get_session_storage_item: [:get, 'session/:session_id/session_storage/key/:key'],
182
+ remove_session_storage_item: [:delete, 'session/:session_id/session_storage/key/:key'],
183
+ get_session_storage_keys: [:get, 'session/:session_id/session_storage'],
184
+ set_session_storage_item: [:post, 'session/:session_id/session_storage'],
185
+ clear_session_storage: [:delete, 'session/:session_id/session_storage'],
186
+ get_session_storage_size: [:get, 'session/:session_id/session_storage/size'],
185
187
 
186
188
  #
187
189
  # ime
188
190
  #
189
191
 
190
- ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'.freeze],
191
- ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'.freeze],
192
- ime_is_activated: [:get, 'session/:session_id/ime/activated'.freeze],
193
- ime_deactivate: [:post, 'session/:session_id/ime/deactivate'.freeze],
194
- ime_activate_engine: [:post, 'session/:session_id/ime/activate'.freeze],
192
+ ime_get_available_engines: [:get, 'session/:session_id/ime/available_engines'],
193
+ ime_get_active_engine: [:get, 'session/:session_id/ime/active_engine'],
194
+ ime_is_activated: [:get, 'session/:session_id/ime/activated'],
195
+ ime_deactivate: [:post, 'session/:session_id/ime/deactivate'],
196
+ ime_activate_engine: [:post, 'session/:session_id/ime/activate'],
195
197
 
196
198
  #
197
199
  # touch
198
200
  #
199
201
 
200
- touch_single_tap: [:post, 'session/:session_id/touch/click'.freeze],
201
- touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'.freeze],
202
- touch_long_press: [:post, 'session/:session_id/touch/longclick'.freeze],
203
- touch_down: [:post, 'session/:session_id/touch/down'.freeze],
204
- touch_up: [:post, 'session/:session_id/touch/up'.freeze],
205
- touch_move: [:post, 'session/:session_id/touch/move'.freeze],
206
- touch_scroll: [:post, 'session/:session_id/touch/scroll'.freeze],
207
- touch_flick: [:post, 'session/:session_id/touch/flick'.freeze],
202
+ touch_single_tap: [:post, 'session/:session_id/touch/click'],
203
+ touch_double_tap: [:post, 'session/:session_id/touch/doubleclick'],
204
+ touch_long_press: [:post, 'session/:session_id/touch/longclick'],
205
+ touch_down: [:post, 'session/:session_id/touch/down'],
206
+ touch_up: [:post, 'session/:session_id/touch/up'],
207
+ touch_move: [:post, 'session/:session_id/touch/move'],
208
+ touch_scroll: [:post, 'session/:session_id/touch/scroll'],
209
+ touch_flick: [:post, 'session/:session_id/touch/flick'],
208
210
 
209
211
  #
210
212
  # logs
211
213
  #
212
214
 
213
- get_available_log_types: [:get, 'session/:session_id/log/types'.freeze],
214
- get_log: [:post, 'session/:session_id/log'.freeze]
215
+ get_available_log_types: [:get, 'session/:session_id/log/types'],
216
+ get_log: [:post, 'session/:session_id/log']
215
217
  }.freeze
216
218
 
217
219
  end # Bridge