【问题标题】:Nightwatch - How to subscribe to CDP Events?Nightwatch - 如何订阅 CDP 活动?
【发布时间】:2023-01-09 04:19:03
【问题描述】:

您可能已经知道,Nightwatch 2 现在包含调用 CDP 协议的方法。

所以,我正在尝试捕获网络响应。我知道必须启用“网络”目标,而且我们还必须订阅Network.responseReceived 事件的回调。我已经在另一个框架工具中完成了它,但是我在使用 CDP 事件的 Nightwatch 文档中找不到任何相关示例。

在这一点上,我不知道允许这个订阅的方法是哪个或者它在哪里,是在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/')

  }
}

任何建议都会非常有帮助,谢谢!

【问题讨论】:

    标签: events nightwatch.js nightwatch cdp


    【解决方案1】:

    我自己也在寻找类似问题的答案。看来有时直接分析 Nightwatch 的源代码要好得多。特别是在版本 2 发布之后。

    CDP 命令的分析,例如。 method-mappings.js 文件中 Nightwatch 代码中的 mockNetworkResponse 方法给出了答案。 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', entry => {
          const params = JSON.parse(entry)
          
          if (params.method === 'Network.responseReceived') {
            console.log('PARAMS >>', params)
          }
        })
    
        await browser.url('https://duckduckgo.com/')
    
      }
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2010-10-09
      • 1970-01-01
      • 2020-08-14
      • 2014-05-06
      • 2020-09-23
      相关资源
      最近更新 更多