3

As you may already know, Nightwatch 2 now includes methods for making calls to CDP protocol.

So, I'm trying to capture network responses. I know that the "Network" target has to be enabled and also we have to subscribe a callback to the Network.responseReceived event. I've already done it in another framework tool, but I can't find any related example in the Nightwatch documentation that uses CDP events.

At this point, I don't know which is the method that allows this subscription or where is it, is it in browser.driver or in cdpConnection objects?

This is the code I'm currently trying:

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/')

  }
}

Any suggestion would be really helpful, Thanks!

leonisimo
  • 31
  • 2

1 Answers1

1

I was looking for an answer to a similar problem myself. It appears that it is sometimes much better to analyze the source code of Nightwatch directly. Especially after version 2 was released.

Analysis of the CDP commands eg. the mockNetworkResponse method in the Nightwatch code in the method-mappings.js file give answers. https://github.com/nightwatchjs/nightwatch/blob/098306cf77d4e380b69ab836231947fe94a12ca0/lib/transport/selenium-webdriver/method-mappings.js

Mind that you are using directly the _wsConnection object. Therefore, that is the message event you are looking for. https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/message_event

Thus, try the following

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/')

  }