WebDriver 和 DevTool 协议有啥区别

Posted

技术标签:

【中文标题】WebDriver 和 DevTool 协议有啥区别【英文标题】:What is the difference between WebDriver and DevTool protocolWebDriver 和 DevTool 协议有什么区别 【发布时间】:2018-11-29 01:11:39 【问题描述】:

众所周知,WebDriver 协议是为自动化测试目的而设计的。但各大浏览器也提供 DevTool 协议。在某些情况下,与 WebDriver 相比,DevTool 协议可以实现更强大的交互和操作。

我的问题是为什么有两种不同的协议,这两种协议之间的主要区别是什么?有没有项目开发的选择经验可以分享?

提前致谢!

参考:

开发工具

https://docs.microsoft.com/en-us/microsoft-edge/devtools-protocol/ https://chromedevtools.github.io/devtools-protocol/ https://searchfox.org/mozillacentral/source/devtools/docs/backend/protocol.md

网络驱动程序:

https://www.seleniumhq.org/projects/webdriver/ https://www.w3.org/TR/webdriver1/ https://docs.microsoft.com/en-us/microsoft-edge/webdriver https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver https://sites.google.com/a/chromium.org/chromedriver/downloads

【问题讨论】:

【参考方案1】:

网络驱动程序

WebDriver 为我们提供了一个精心设计的面向对象的 API,它可以为通过动态网页创建的现代高级 Web 应用程序提供更好的支持。简而言之,WebDriver 是一个远程控制接口,使我们能够自省和控制用户代理。它为我们提供了一个平台和语言中性线协议,以及作为进程外程序远程指示Web 浏览器行为的一种方式。

WebDriver 规范

WebDriver Specification 由Browser Testing and Tools Working Group 作为编辑草稿发布。编辑草案并不意味着 W3C 成员的认可,并且可能随时被其他文档更新、替换或废止。

DevTools 协议

Developer Tools Protocol 被各种浏览器javascript 引擎调试工具 用于:

使用一套诊断工具帮助 Web 开发人员,这些工具适用于各种目标。 满足对特定目标devtools 协议适配器 的需求,并简化工具用户和工具开发人员的体验。 提供一个供应商中立的平台,以促进不同协议实施和感兴趣的客户之间的协作和相互达成共识。 减少根据用户故事构建任何进一步兼容的协议实施所需的工程投资。

一些具有内置调试协议的浏览器引擎浏览器是:

Chrome DevTools WebKit / Safari Node.js 火狐 1 (in development) Edge 2([开发中](链接将很快更新))

一些公开通用协议的适配器:

Microsoft Edge Diagnostics Adapter - 将被本机支持取代(如上所述)。 RemoteDebug iOS WebKit Adapter

您可以在此处找到RemoteDebug - Protocol Adaptors 中的适配器列表


1.请注意,FirefoxDevTools ProtocolWork In Progress

2.请注意,EdgeDevTools ProtocolWork In Progress

【讨论】:

感谢您的解释。还有一个问题,开发一个web自动化测试框架,哪个协议更好? @Erxin 正如我所提到的,WebDriver 是一个规范,如果使用 Selenium,则必须遵守该规范,其中 DevTools 协议 通过 Chrome DevTools ProtocolWebKit/webkit 等实现,您应该始终根据您的 Test Specification 选择一个。实现几乎相同。【参考方案2】:

WebDriver 协议和 DevTools 协议之间的主要区别在于,WebDriver 协议需要一个像浏览器驱动程序这样的中间人(例如:chrome-driver),它是一个位于自动化脚本和浏览器之间的服务器,支持浏览器控制,但如果DevTools 协议,自动化脚本可以直接与在调试模式下运行的浏览器对话,使无头自动化非常简单。

Chrome驱动内部使用DevTools协议来控制浏览器,所以如果我们使用WebDriver协议,它又会使用Devtools协议来控制浏览器。

如果跨浏览器测试对于新的测试工具来说很重要,那么 DevTools 协议现在可能不适合,因为还没有标准,而且大部分都在进行中。否则,DevTools 协议将是一个不错的选择,因为它提供了更多控制,例如拦截请求标头、模拟网络等,并使无头自动化方式更容易。

【讨论】:

以上是关于WebDriver 和 DevTool 协议有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

如何可视化 chrome DevTool 协议消息的日志?

Selenium 中的 WebDriver 和 WebElement 有啥区别?

selenium 中的 ChromeDriver 和 WebDriver 有啥区别?

appium的webdriver和selenium有啥区别?

“Selenium-server-standalone.jar”和“Selenium Client & WebDriver”有啥区别?

steam账号分国家地区吗 怎么看自己的账号是啥区