什么是 Chrome DevTools
ChromeDevTools是一组直接内置到Chrome、Opera和MicrosoftEdge等基于Chrome的浏览器中的工具,用于帮助开发人员调试和调查网站。
借助Chrome开发工具,开发者可以更深入地测试网站,并能够:
- 检查DOM中的元素
- 编辑元素和CSS样式
- 检查和监控网站的性能
- 模拟用户的地理位置
- 模拟网络速度
- 捕获HTTP请求
- 执行和调试JavaScript
- 查看控制台日志
Selenium 4 Chrome DevTools APIs
在之前的文章中,我们介绍了Selenium 4的一些新特性。在本文中,我们将讨论Selenium 4的一个最重要特性 – 集成使用CDP(ChromeDevTools协议)
Selenium 4已经添加了对ChromeDevTools API的本地支持。使用这些新API,我们的测试现在可以:
- 捕获和监视网络流量和性能
- 模拟地域位置相关的测试
- 更改设备模式验证页面响应式布局
Selenium 4引入了新的ChromiumDriver类,它包括两种访问ChromeDevTools的方法:getDevTools()和executeCdpCommand()。
getDevTools()方法返回新的DevTools对象,该对象允许您为CDP发送内置的Selenium命令。这些命令是包装方法,使其更清洁,更容易调用CDP函数。
executeCdpCommand()方法允许您直接执行原生CDP命令。它不使用包装器API,而是允许您直接传递chromedevtools命令和该命令的参数。
模拟设备模式
如今,大多数应用程序都可以从各种平台和设备(如手机、平板电脑、可穿戴设备、台式机)响应最终用户的需求。
作为测试人员,我们可能希望将应用程序放在不同的维度中,以触发验证应用程序的响应性。
使用如下CDP命令可以配置设备模式:Emulation.setDeviceMetricsOverride
模拟网络速度
许多用户通过连接到WiFi或蜂窝网络的设备访问web应用程序。网络信号很弱是非常普遍的现象,因此网速很慢。
当Internet连接缓慢或断断续续脱机时,测试应用程序的行为可能很重要。
使用如下CDP命令可以配置网络速度:Network.emulateNetworkConditions
模拟地理定位
很难测试基于应用程序位置的功能,例如不同地理位置的不同报价、货币、税收规则、运费和日期/时间格式。
通过模拟地理位置,我们可以覆盖以上所有场景。
使用如下CDP命令可以配置地域信息:Emulation.setGeolocationOverride
捕获HTTP请求
使用DevTools,我们可以捕获应用程序正在调用的HTTP请求,并访问方法、数据、头等信息。
让我们看看如何用示例代码捕获HTTP请求、URI和请求方法。
访问控制台日志
我们依赖日志来调试和分析故障。在使用特定数据或特定条件测试和处理应用程序时,日志可以帮助我们调试和捕获错误消息。
通过调用CDP Log命令,我们可以通过Selenium脚本捕获控制台日志,如下所示:
捕获性能指标
现如今当我们以高速的迭代去构建软件时,还应该检测产品性能的瓶颈。表现不佳的网站和加载缓慢的页面会让客户不满意。
使用如下CDP命令可以获取性能指标:Performance.enable
基本身份验证
Selenium不支持与浏览器弹出窗口交互,它只能与DOM元素交互。这对身份验证对话框等弹出窗口提出了挑战。
我们可以通过使用CDP API直接用DevTools处理身份验证来绕过这个问题。
使用如下CDP命令可以设置基本身份认证信息:Network.setExtraHTTPHeaders
结论
随着CDP API的集成,Selenium变得更加强大。现在我们可以增加更多测试手段:捕获HTTP网络流量、收集性能指标、处理身份验证以及模拟地理位置、时区和设备模式。用于增加测试验证范围,模拟难以复现的场景测试。
在接下来的文章中,我们将详细介绍使用CDP的原生自动化测试框架 – Puppeter