Exemplo n.º 1
0
  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']
Exemplo n.º 2
0
    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']
Exemplo n.º 3
0
    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']
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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']
Exemplo n.º 6
0
    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']
Exemplo n.º 7
0
  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)
Exemplo n.º 8
0
 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