捕获网络请求
概述
在加载单个网页时,您的浏览器必须对不同的 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"'
}