Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/test/chromedriver/client/chromedriver.py

Issue 2230053002: [chromedriver] Added option to make element references W3C compliant. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased code with w3c flag change. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 def __init__(self, server_url, chrome_binary=None, android_package=None, 106 def __init__(self, server_url, chrome_binary=None, android_package=None,
107 android_activity=None, android_process=None, 107 android_activity=None, android_process=None,
108 android_use_running_app=None, chrome_switches=None, 108 android_use_running_app=None, chrome_switches=None,
109 chrome_extensions=None, chrome_log_path=None, 109 chrome_extensions=None, chrome_log_path=None,
110 debugger_address=None, logging_prefs=None, 110 debugger_address=None, logging_prefs=None,
111 mobile_emulation=None, experimental_options=None, 111 mobile_emulation=None, experimental_options=None,
112 download_dir=None, network_connection=None, 112 download_dir=None, network_connection=None,
113 send_w3c_capability=None, send_w3c_request=None, 113 send_w3c_capability=None, send_w3c_request=None,
114 page_load_strategy=None): 114 page_load_strategy=None):
115
samuong 2016/08/11 18:13:20 nit: no need for a new blank line
roisinmcl 2016/08/13 01:47:26 Done.
115 self._executor = command_executor.CommandExecutor(server_url) 116 self._executor = command_executor.CommandExecutor(server_url)
116 117
117 options = {} 118 options = {}
118 119
119 if experimental_options: 120 if experimental_options:
120 assert isinstance(experimental_options, dict) 121 assert isinstance(experimental_options, dict)
121 options = experimental_options.copy() 122 options = experimental_options.copy()
122 123
123 if android_package: 124 if android_package:
124 options['androidPackage'] = android_package 125 options['androidPackage'] = android_package
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 self.capabilities = self._UnwrapValue(response['value']) 210 self.capabilities = self._UnwrapValue(response['value'])
210 211
211 def _WrapValue(self, value): 212 def _WrapValue(self, value):
212 """Wrap value from client side for chromedriver side.""" 213 """Wrap value from client side for chromedriver side."""
213 if isinstance(value, dict): 214 if isinstance(value, dict):
214 converted = {} 215 converted = {}
215 for key, val in value.items(): 216 for key, val in value.items():
216 converted[key] = self._WrapValue(val) 217 converted[key] = self._WrapValue(val)
217 return converted 218 return converted
218 elif isinstance(value, WebElement): 219 elif isinstance(value, WebElement):
219 return {'ELEMENT': value._id} 220 if (self.w3c_compliant):
221 return {'element-6066-11e4-a52e-4f735466cecf': value._id}
222 else:
223 return {'ELEMENT': value._id}
samuong 2016/08/11 18:13:20 let's create constants for the element keys, since
roisinmcl 2016/08/13 01:47:26 Done.
220 elif isinstance(value, list): 224 elif isinstance(value, list):
221 return list(self._WrapValue(item) for item in value) 225 return list(self._WrapValue(item) for item in value)
222 else: 226 else:
223 return value 227 return value
224 228
225 def _UnwrapValue(self, value): 229 def _UnwrapValue(self, value):
226 """Unwrap value from chromedriver side for client side.""" 230 """Unwrap value from chromedriver side for client side."""
227 if isinstance(value, dict): 231 if isinstance(value, dict):
228 if (len(value) == 1 and 'ELEMENT' in value 232 if (self.w3c_compliant and len(value) == 1
233 and 'element-6066-11e4-a52e-4f735466cecf' in value
234 and isinstance(
235 value['element-6066-11e4-a52e-4f735466cecf'], basestring)):
samuong 2016/08/11 18:13:20 this is a big conjunction, let's do the len(value)
roisinmcl 2016/08/13 01:47:26 Done.
236 return WebElement(self, value['element-6066-11e4-a52e-4f735466cecf'])
237 elif (len(value) == 1 and 'ELEMENT' in value
229 and isinstance(value['ELEMENT'], basestring)): 238 and isinstance(value['ELEMENT'], basestring)):
230 return WebElement(self, value['ELEMENT']) 239 return WebElement(self, value['ELEMENT'])
231 else: 240 else:
232 unwraped = {} 241 unwraped = {}
233 for key, val in value.items(): 242 for key, val in value.items():
234 unwraped[key] = self._UnwrapValue(val) 243 unwraped[key] = self._UnwrapValue(val)
235 return unwraped 244 return unwraped
236 elif isinstance(value, list): 245 elif isinstance(value, list):
237 return list(self._UnwrapValue(item) for item in value) 246 return list(self._UnwrapValue(item) for item in value)
238 else: 247 else:
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 481
473 def GetNetworkConnection(self): 482 def GetNetworkConnection(self):
474 return self.ExecuteCommand(Command.GET_NETWORK_CONNECTION) 483 return self.ExecuteCommand(Command.GET_NETWORK_CONNECTION)
475 484
476 def DeleteNetworkConditions(self): 485 def DeleteNetworkConditions(self):
477 self.ExecuteCommand(Command.DELETE_NETWORK_CONDITIONS) 486 self.ExecuteCommand(Command.DELETE_NETWORK_CONDITIONS)
478 487
479 def SetNetworkConnection(self, connection_type): 488 def SetNetworkConnection(self, connection_type):
480 params = {'parameters': {'type': connection_type}} 489 params = {'parameters': {'type': connection_type}}
481 self.ExecuteCommand(Command.SET_NETWORK_CONNECTION, params) 490 self.ExecuteCommand(Command.SET_NETWORK_CONNECTION, params)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698