Nightwatch - Как подписаться на события CDP?

Как вы, возможно, уже знаете, Nightwatch 2 теперь включает в себя методы для совершения вызовов по протоколу CDP.

Итак, я пытаюсь захватить сетевые ответы. Я знаю, что цель «Сеть» должна быть включена, а также мы должны подписаться на обратный вызов для Network.responseReceivedмероприятие. Я уже сделал это в другом инструменте фреймворка, но не могу найти в документации Nightwatch ни одного связанного примера, в котором используются события CDP.

На данный момент я не знаю, какой метод разрешает эту подписку или где она находится, находится ли она в browser.driverили в cdpConnectionобъекты?

Это код, который я сейчас пытаюсь:

      module.exports = {
  '@tags': ['njs2-03'],
  async myTest (browser) {
    await browser.driver.sendAndGetDevToolsCommand('Network.enable')
    
    const cdpConnection = await browser.driver.createCDPConnection('page');
    cdpConnection._wsConnection.on('Network.responseReceived', entry => {
      console.log('ENTRY >>', entry)
    })

    await browser.url('https://duckduckgo.com/')

  }
}

Любое предложение будет действительно полезно, спасибо!

1 ответ

Я сам искал ответ на аналогичную проблему. Оказывается, иногда гораздо лучше анализировать исходный код Nightwatch напрямую. Особенно после выхода второй версии.

Анализ команд CDP, например. вmockNetworkResponseметод в коде Nightwatch вmethod-mappings.jsфайл дайте ответы. https://github.com/nightwatchjs/nightwatch/blob/098306cf77d4e380b69ab836231947fe94a12ca0/lib/transport/selenium-webdriver/method-mappings.js

Имейте в виду, что вы используете непосредственно_wsConnectionобъект. Следовательно, этоmessageсобытие, которое вы ищете. https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/message_event

Таким образом, попробуйте следующее

      async myTest (browser) {
    await browser.driver.sendAndGetDevToolsCommand('Network.enable')
    
    const cdpConnection = await browser.driver.createCDPConnection('page')

    cdpConnection._wsConnection.on('message', message => {
      const messageParsed = JSON.parse(message)
      
      if (messageParsed.method === 'Network.responseReceived') {
        console.log('DEVTOOLS EVENT PARAMS >>', messageParsed.['params'])
      }
    })

    await browser.url('https://duckduckgo.com/')

  }
    
Другие вопросы по тегам