简体   繁体   中英

Nightwatch - How to subscribe to CDP Events?

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!

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

  }
    

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM