def Evaluate(self, expr, context_id, timeout): """Evaluates a javascript expression and returns the result. |context_id| can refer to an iframe. The main page has context_id=1, the first iframe context_id=2, etc. Raises: exceptions.EvaluateException exceptions.WebSocketDisconnected websocket.WebSocketException socket.error """ request = { 'method': 'Runtime.evaluate', 'params': { 'expression': expr, 'returnByValue': True } } if context_id is not None: self.EnableAllContexts() request['params']['contextId'] = context_id res = self._inspector_websocket.SyncRequest(request, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) if 'exceptionDetails' in res['result']: # TODO(nduca): propagate stacks from javascript up to the python # exception. text = res['result']['exceptionDetails']['text'] raise exceptions.EvaluateException(text) if res['result']['result']['type'] == 'undefined': return None return res['result']['result']['value']
def Evaluate(self, expr, timeout=60): """Evalutes expr in javascript and returns the JSONized result. Consider using Execute for cases where the result of the expression is not needed. If evaluation throws in javascript, a python EvaluateException will be raised. If the result of the evaluation cannot be JSONized, then an EvaluationException will be raised. """ request = { 'method': 'Runtime.evaluate', 'params': { 'expression': expr, 'returnByValue': True } } res = self._inspector_backend.SyncRequest(request, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) if 'wasThrown' in res['result'] and res['result']['wasThrown']: # TODO(nduca): propagate stacks from javascript up to the python # exception. raise exceptions.EvaluateException( res['result']['result']['description']) if res['result']['result']['type'] == 'undefined': return None return res['result']['result']['value']
def Evaluate(self, expr, context_id, timeout, user_gesture=False, promise=False): """Evaluates a javascript expression and returns the result. |context_id| can refer to an iframe. The main page has context_id=1, the first iframe context_id=2, etc. Raises: exceptions.EvaluateException exceptions.WebSocketDisconnected inspector_websocket.WebSocketException socket.error """ request = { 'method': 'Runtime.evaluate', 'params': { 'expression': expr, 'returnByValue': True, 'userGesture': user_gesture, 'awaitPromise': promise, } } if context_id is not None: self.EnableAllContexts() request['params']['contextId'] = context_id res = self._inspector_websocket.SyncRequest(request, timeout) if 'error' in res: msg = res['error']['message'] if msg == TARGET_CLOSED_MESSAGE: raise exceptions.DevtoolsTargetClosedException(msg) raise exceptions.EvaluateException(msg) if 'exceptionDetails' in res['result']: details = res['result']['exceptionDetails'] raise exceptions.EvaluateException( text=details['text'], class_name=details.get('exception', {}).get('className'), description=details.get('exception', {}).get('description')) if res['result']['result']['type'] == 'undefined': return None return res['result']['result']['value']
def Crash(self, context_id, timeout): request = { 'method': 'Page.crash', } if context_id is not None: self.EnableAllContexts() request['params']['contextId'] = context_id res = self._inspector_websocket.SyncRequest(request, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) return res
def Evaluate(self, expr, context_id, timeout): request = { 'method': 'Runtime.evaluate', 'params': { 'expression': expr, 'returnByValue': True } } if context_id is not None: self.EnableAllContexts() request['params']['contextId'] = context_id res = self._inspector_backend.SyncRequest(request, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) if 'wasThrown' in res['result'] and res['result']['wasThrown']: # TODO(nduca): propagate stacks from javascript up to the python # exception. raise exceptions.EvaluateException( res['result']['result']['description']) if res['result']['result']['type'] == 'undefined': return None return res['result']['result']['value']
def Evaluate(self, expr, context_id, timeout): """Evaluates a javascript expression and returns the result. |context_id| can refer to an iframe. The main page has context_id=1, the first iframe context_id=2, etc. Raises: exceptions.EvaluateException exceptions.WebSocketDisconnected inspector_websocket.WebSocketException socket.error """ request = { 'method': 'Runtime.evaluate', 'params': { 'expression': expr, 'returnByValue': True } } if context_id is not None: self.EnableAllContexts() request['params']['contextId'] = context_id res = self._inspector_websocket.SyncRequest(request, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) if 'exceptionDetails' in res['result']: details = res['result']['exceptionDetails'] raise exceptions.EvaluateException( text=details['text'], class_name=details.get('exception', {}).get('className'), description=details.get('exception', {}).get('description')) if res['result']['result']['type'] == 'undefined': return None return res['result']['result']['value']
def _GetServiceWorkerState(self): """Returns service worker registration state. Returns: ServiceWorkerState if service worker registration state is not unexpected. Raises: exceptions.EvaluateException exceptions.Error: See EvaluateJavaScript() for a detailed list of possible exceptions. """ state = self.EvaluateJavaScript( '{{ @script }}; window.__telemetry_getServiceWorkerState()', script=self._wait_for_serviceworker_js) if state in {ServiceWorkerState.NOT_REGISTERED, ServiceWorkerState.INSTALLING, ServiceWorkerState.ACTIVATED}: return state else: raise exceptions.EvaluateException(state)
def CrashGpuProcess(self, timeout): res = self._inspector_websocket.SyncRequest( {'method': 'Browser.crashGpuProcess'}, timeout) if 'error' in res: raise exceptions.EvaluateException(res['error']['message']) return res