OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import sys | 5 import sys |
6 import platform | 6 import platform |
7 | 7 |
8 import command_executor | 8 import command_executor |
9 from command_executor import Command | 9 from command_executor import Command |
10 from webelement import WebElement | 10 from webelement import WebElement |
11 | 11 |
| 12 ELEMENT_KEY_W3C = "element-6066-11e4-a52e-4f735466cecf" |
| 13 ELEMENT_KEY = "ELEMENT" |
12 | 14 |
13 class ChromeDriverException(Exception): | 15 class ChromeDriverException(Exception): |
14 pass | 16 pass |
15 class NoSuchElement(ChromeDriverException): | 17 class NoSuchElement(ChromeDriverException): |
16 pass | 18 pass |
17 class NoSuchFrame(ChromeDriverException): | 19 class NoSuchFrame(ChromeDriverException): |
18 pass | 20 pass |
19 class UnknownCommand(ChromeDriverException): | 21 class UnknownCommand(ChromeDriverException): |
20 pass | 22 pass |
21 class StaleElementReference(ChromeDriverException): | 23 class StaleElementReference(ChromeDriverException): |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 if isinstance(response['status'], basestring): | 203 if isinstance(response['status'], basestring): |
202 self.w3c_compliant = True | 204 self.w3c_compliant = True |
203 elif isinstance(response['status'], int): | 205 elif isinstance(response['status'], int): |
204 self.w3c_compliant = False | 206 self.w3c_compliant = False |
205 else: | 207 else: |
206 raise UnknownError("unexpected response") | 208 raise UnknownError("unexpected response") |
207 | 209 |
208 self._session_id = response['sessionId'] | 210 self._session_id = response['sessionId'] |
209 self.capabilities = self._UnwrapValue(response['value']) | 211 self.capabilities = self._UnwrapValue(response['value']) |
210 | 212 |
| 213 |
211 def _WrapValue(self, value): | 214 def _WrapValue(self, value): |
212 """Wrap value from client side for chromedriver side.""" | 215 """Wrap value from client side for chromedriver side.""" |
213 if isinstance(value, dict): | 216 if isinstance(value, dict): |
214 converted = {} | 217 converted = {} |
215 for key, val in value.items(): | 218 for key, val in value.items(): |
216 converted[key] = self._WrapValue(val) | 219 converted[key] = self._WrapValue(val) |
217 return converted | 220 return converted |
218 elif isinstance(value, WebElement): | 221 elif isinstance(value, WebElement): |
219 return {'ELEMENT': value._id} | 222 if (self.w3c_compliant): |
| 223 return {ELEMENT_KEY_W3C: value._id} |
| 224 else: |
| 225 return {ELEMENT_KEY: value._id} |
220 elif isinstance(value, list): | 226 elif isinstance(value, list): |
221 return list(self._WrapValue(item) for item in value) | 227 return list(self._WrapValue(item) for item in value) |
222 else: | 228 else: |
223 return value | 229 return value |
224 | 230 |
225 def _UnwrapValue(self, value): | 231 def _UnwrapValue(self, value): |
226 """Unwrap value from chromedriver side for client side.""" | |
227 if isinstance(value, dict): | 232 if isinstance(value, dict): |
228 if (len(value) == 1 and 'ELEMENT' in value | 233 if (self.w3c_compliant and len(value) == 1 |
229 and isinstance(value['ELEMENT'], basestring)): | 234 and ELEMENT_KEY_W3C in value |
230 return WebElement(self, value['ELEMENT']) | 235 and isinstance( |
| 236 value[ELEMENT_KEY_W3C], basestring)): |
| 237 return WebElement(self, value[ELEMENT_KEY_W3C]) |
| 238 elif (len(value) == 1 and ELEMENT_KEY in value |
| 239 and isinstance(value[ELEMENT_KEY], basestring)): |
| 240 return WebElement(self, value[ELEMENT_KEY]) |
231 else: | 241 else: |
232 unwraped = {} | 242 unwraped = {} |
233 for key, val in value.items(): | 243 for key, val in value.items(): |
234 unwraped[key] = self._UnwrapValue(val) | 244 unwraped[key] = self._UnwrapValue(val) |
235 return unwraped | 245 return unwraped |
236 elif isinstance(value, list): | 246 elif isinstance(value, list): |
237 return list(self._UnwrapValue(item) for item in value) | 247 return list(self._UnwrapValue(item) for item in value) |
238 else: | 248 else: |
239 return value | 249 return value |
240 | 250 |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 | 482 |
473 def GetNetworkConnection(self): | 483 def GetNetworkConnection(self): |
474 return self.ExecuteCommand(Command.GET_NETWORK_CONNECTION) | 484 return self.ExecuteCommand(Command.GET_NETWORK_CONNECTION) |
475 | 485 |
476 def DeleteNetworkConditions(self): | 486 def DeleteNetworkConditions(self): |
477 self.ExecuteCommand(Command.DELETE_NETWORK_CONDITIONS) | 487 self.ExecuteCommand(Command.DELETE_NETWORK_CONDITIONS) |
478 | 488 |
479 def SetNetworkConnection(self, connection_type): | 489 def SetNetworkConnection(self, connection_type): |
480 params = {'parameters': {'type': connection_type}} | 490 params = {'parameters': {'type': connection_type}} |
481 self.ExecuteCommand(Command.SET_NETWORK_CONNECTION, params) | 491 self.ExecuteCommand(Command.SET_NETWORK_CONNECTION, params) |
OLD | NEW |