拦截网络响应
概述
在测试网站时,可能会有这种情况,您的网站向特定 URL 发送 HTTP 请求,但您不想在测试运行期间向该 URL 发送请求,而是想要模拟该 URL 的响应。现在可以使用 Nightwatch 实现这一点。
由于 Selenium 4 中现在提供了 Chrome DevTools 协议支持,Nightwatch 现在支持拦截 HTTP 请求并模拟特定 URL 的响应。
此命令仅适用于基于 Chromium 的浏览器,例如 Google Chrome 和 Microsoft Egde。
模拟网络响应
此命令允许您模拟特定 URL 的 HTTP 响应。运行此命令后,只要 HTTP 请求的 URL 与传递到命令中的 URL **完全** 匹配,就会拦截该请求,并将提供的模拟发送回浏览器作为响应。
您只需要在导航到您的网站之前使用所需参数调用 browser.mockNetworkResponse()
命令。
mockNetworkResponse()
接受 url
(string
类型) 作为第一个参数,并接受 response
对象作为第二个参数。response
对象的规范如下所示:
键 | 类型 | 默认值 | 描述 |
---|---|---|---|
状态 |
数字 | 200 | 模拟响应的 HTTP 状态。 |
标头 |
对象 | {} |
模拟响应中的 HTTP 标头。 例如: headers = {'Connection': 'Keep-Alive', 'Content-Type': 'UTF-8'} |
主体 可选 |
字符串 | '' |
模拟响应的主体。 |
示例
tests/mock-network-response.js
describe('mock network response', function() {
it('intercepts the request made to Google search and mocks its response', function() {
browser
.mockNetworkResponse('https://www.google.com/', {
status: 200,
headers: {
'Content-Type': 'UTF-8'
},
body: 'Hello there!'
})
.navigateTo('https://www.google.com/')
.pause(2000);
});
});