async getNodeDetails(session, backendNodeId) {
    try {
      const objectId = await resolveNodeIdToObjectId(session, backendNodeId);
      if (!objectId) return null;

      const deps = ExecutionContext.serializeDeps([
        pageFunctions.getNodeDetails,
        getNodeDetailsData,
      ]);
      return await session.sendCommand('Runtime.callFunctionOn', {
        objectId,
        functionDeclaration: `function () {
          ${deps}
          return getNodeDetailsData.call(this);
        }`,
        returnByValue: true,
        awaitPromise: true,
      });
    } catch (err) {
      Sentry.captureException(err, {
        tags: {gatherer: 'TraceElements'},
        level: 'error',
      });
    }

    return null;
  }
@param {LH.Gatherer.ProtocolSession} session
@param {number} backendNodeId