概述

在加载单个网页时,您的浏览器必须对不同的 URL 进行大量网络调用,以获取要在页面上提供服务的不同资源。现在,您可能想检查浏览器是否正在向特定 URL 发送请求,或者只是收集浏览器为加载网站而进行的所有网络调用。

您可以通过转到浏览器中提供的 DevTools 的“网络”选项卡并查看所有进行的网络调用来实现,但是有一种简单、自动化的方式。

随着 Chrome DevTools 协议支持 现在在 Selenium 4 中可用,Nightwatch 现在支持捕获加载网站时进行的所有网络调用。

此命令仅适用于基于 Chromium 的浏览器,例如 Google Chrome 和 Microsoft Edge。

捕获网络调用

此命令允许您捕获加载网站时进行的所有网络调用,并将它们发送回您自己的测试运行中,方法是通过您提供的回调函数,并将网络调用参数作为参数。

您只需要在导航到您的网站之前调用 browser.captureNetworkRequests() 命令,并提供必要的参数。

captureNetworkRequests() 接受一个回调函数,每当浏览器进行网络调用时,该函数将接收一个 requestParams 对象作为参数。可以在 此处 找到接收到的 requestParams 中可用的所有属性。一些重要的属性如下所示

名称 类型 描述
时间戳 编号 进行网络调用的时间。
请求
对象 request 对象包含有关进行的网络调用的所有重要详细信息,例如 URL、使用的 HTTP 方法、HTTP 标头等。
可以在 此处 阅读 request 对象中可用的所有属性。

示例

tests/capture-network-calls.js
describe('capture network requests', function() {
  it('captures and logs network requests as they occur', function() {
    this.requestCount = 1;
    browser
      .captureNetworkRequests((requestParams) => {
        console.log('Request Number:', this.requestCount++);
        console.log('Request URL:', requestParams.request.url);
        console.log('Request method:', requestParams.request.method);
        console.log('Request headers:', requestParams.request.headers);
      })
      .navigateTo('https://www.google.com');
  });
});

以上示例中某个网络调用的输出

  Running Capture network calls:
───────────────────────────────────────────────────────────────────────────────────────────────────
Request Number: 35
Request URL: https://www.google.com/favicon.ico
Request method: GET
Request headers: {
  'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
  'sec-ch-ua-full-version-list': '" Not A;Brand";v="99.0.0.0", "Chromium";v="102.0.5005.61", "Google Chrome";v="102.0.5005.61"',
  'sec-ch-ua-mobile': '?0',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36',
  'sec-ch-ua-arch': '"x86"',
  'sec-ch-viewport-width': '1200',
  'sec-ch-ua-full-version': '"102.0.5005.61"',
  'sec-ch-ua-platform-version': '"12.1.0"',
  Referer: 'https://www.google.com/',
  'sec-ch-dpr': '2',
  'sec-ch-ua-bitness': '"64"',
  'sec-ch-ua-wow64': '?0',
  'sec-ch-ua-model': '',
  'sec-ch-ua-platform': '"macOS"'
}