什么是 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和请求方法。

Copy to Clipboard

访问控制台日志

我们依赖日志来调试和分析故障。在使用特定数据或特定条件测试和处理应用程序时,日志可以帮助我们调试和捕获错误消息。

通过调用CDP Log命令,我们可以通过Selenium脚本捕获控制台日志,如下所示:

Copy to Clipboard

捕获性能指标

现如今当我们以高速的迭代去构建软件时,还应该检测产品性能的瓶颈。表现不佳的网站和加载缓慢的页面会让客户不满意。

使用如下CDP命令可以获取性能指标:Performance.enable

基本身份验证

Selenium不支持与浏览器弹出窗口交互,它只能与DOM元素交互。这对身份验证对话框等弹出窗口提出了挑战。

我们可以通过使用CDP API直接用DevTools处理身份验证来绕过这个问题。

使用如下CDP命令可以设置基本身份认证信息:Network.setExtraHTTPHeaders

结论

随着CDP API的集成,Selenium变得更加强大。现在我们可以增加更多测试手段:捕获HTTP网络流量、收集性能指标、处理身份验证以及模拟地理位置、时区和设备模式。用于增加测试验证范围,模拟难以复现的场景测试。

在接下来的文章中,我们将详细介绍使用CDP的原生自动化测试框架 – Puppeter