新的网络原生API (Beta)
WebdriverIO 团队继续努力为其自动化界面提供更多功能,通过将其 API 中提供新的网络原生API。使用最新的v6.3
更新,您现在可以轻松地在测试中模拟 Web 资源并定义自定义响应,从而允许您大幅减少测试时间,因为您现在可以更好地测试各个场景。有了它,WebdriverIO 赶上了其他流行的测试工具,如Puppeteer、Playwright 或 Cypress,甚至进一步简化了模拟。
现在,替换浏览器中的 REST API 请求可以像下面这样简单。
const mock = browser.mock('https://todo-backend-express-knex.herokuapp.com/')
mock.respond([{
title: 'Injected (non) completed Todo',
order: null,
completed: false
}, {
title: 'Injected completed Todo',
order: null,
completed: true
}])
browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/')
$('#todo-list li').waitForExist()
console.log($$('#todo-list li').map(el => el.getText()))
// outputs: "[ 'Injected (non) completed Todo', 'Injected completed Todo' ]"
除此之外,您还可以修改 JavaScript 或 CSS 文件,以及中止请求或根据原始响应动态修改响应。您可以在文档的模拟和间谍部分找到所有功能的更多信息。
限流
除了模拟之外,新版本还附带了另一个网络命令,该命令允许修改浏览器的网络吞吐量,从而允许在不同的网络条件下进行测试,例如常规 3G 甚至离线模式。
// throttle to Regular 3G
browser.throttle('Regular 3G')
// disable network completely
browser.throttle('Offline')
// set custom network throughput
browser.throttle({
'offline': false,
'downloadThroughput': 200 * 1024 / 8,
'uploadThroughput': 200 * 1024 / 8,
'latency': 20
})
这可以开启一些有趣的用例,您希望确保您的渐进式 Web 应用 (PWA) 存储所有必要的资源,以便离线用户使用该应用程序。
支持
此功能使用 Chrome DevTools 功能来启用此类行为。因此,它只能在提供此类接口的地方得到支持,目前是Chrome、Firefox Nightly 和Chromium Edge。Mozilla 的 Firefox 团队正在努力将其发布到 Firefox 的稳定版本中,因此可以预期很快就会支持它。
最重要的是,Sauce Labs 的团队正在开发各种 WebDriver 扩展,这些扩展甚至允许在云中支持此功能。更多更新即将推出。
实现
通过此功能,WebdriverIO 现在始终将Puppeteer作为第二个自动化驱动程序,以便在可能的情况下启用这些额外功能。展望未来,该团队正在探索更多机会,将 Chrome DevTools 功能启用到内置 API 中。
请告诉我们您的想法!我们预计这里或那里会出现一些错误,但会立即确保修复它们。虽然我们对当前的界面设计非常有信心,但仍然有可能进行一些调整以使其更加用户友好。
给我们反馈!
我们将其作为beta
功能发布,并希望您能帮助我们识别实现和支持中的弱点。请尝试一下,如果事情不清楚或根本无法工作,请创建一个问题。我们希望在社区和您的帮助下,能够在未来几个月内将其发布为稳定版本!