selenium发展史

Selenium Core

        2004 年,Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作,由于这个项目需要频繁回归,这导致他不得不每天做着重复且低效的工作。为了解决这个困境,Jason 开发了一个运行在 JavaScript 沙箱中的 E2E 测试工具,并将其命名为 JavaScript Test Runner 的工具。
        后来他的团队在此基础上完善了很多 API,这个工具后来被称为 Selenium Core,也是 Selenium 的雏形。这时的 Selenium Core 只支持 JS 编写的测试脚本,且只能在本地运行。

Selenium 1.0

        2006年, Selenium Core 团队在之前的基础上,发布了三个新工具:Selenium IDE、Selenium Grid、Selenium RC(RC 是 Remote Control 的简写),这就是第一版 Selenium。所以 Selenium 1.0 指的是这三个工具所组成的系统。Selenium 1 的发布,让多种不同语言的开发者可以控制浏览器,很多之前需要人工完成的工作得以自动化。但 Selenium 1 仍有不少问题,比如它不能捕获本机的键盘和鼠标事件。

  • Selenium IDE 用来录制及回放简单的测试用例脚本;
  • Selenium Grid 用来支持分布式运行测试脚本;
  • Selenium Remote Control (RC) : 等于 Client Libraries + Selenium Serve, Selenium Clinet用于编写测试脚本; Selenium Server用来控制浏览器行为,
  • Client Libraries(Selenium Client):你可以将它理解为一个工具库,它是 Selenium Server 提供的 API 的集合,主要用于编写测试脚本。
  • Selenium Server :用来控制浏览器行为,它主要包含三个部分:1.Selenium Launcher 用于启动浏览器,把 Selenium Core 加载到浏览器页面当中,并把浏览器的代理设置为 Selenium Server 的 Http Proxy。   2.Selenium Core :是一个带断言库的 test suite runner,由 Selenium Server 注入到浏览器中,它是 JavaScript 函数的集合,Selenium 通过这些函数对浏览器进行操作。  3.Selenium HTTP Proxy:顾名思义就是个代理服务,接受和处理脚本的 HTTP 请求

WebDriver

        在 Selenium 1.0 发布的 2006 年,Google 工程师 Simon Stewart 发起了一个名为 WebDriver 的项目。它也是一个自动化测试工具,彼时刚刚起步,后来它也将成为 Selenium 的竞品之一。

        导致 Selenium 1 各种问题的一个主要原因是,Selenium 是通过在浏览器中注入 JavaScript 应用,并通过执行应用中的各种 JS 函数来实现对浏览器的控制。而 Simon 希望 WebDriver 能通过浏览器提供的 API 来直接操作浏览器,借此来规避在 JS 沙箱中的各种限制。

        经过几年的发展,WebDriver 通过与各浏览器的集成,成功实现了在外部直接控制浏览器行为的目标,同时 WebDriver 还利用操作系统级的调用,支持模拟用户输入。同时 WebDriver 还针对不同浏览器有着不同的策略,比如当操作 Firefox 浏览器的时候,WebDriver 是用 JavaScripts 来调用 API 的;而当我们操作 IE 浏览器的时候,WebDriver 就用 C++ 了。

        直到这时,WebDriver 成为了 Selenium 1 的有力竞争者。

Selenium 2.0

        2009 年,在 Google 测试自动化会议上,两个团队的开发人员在沟通后决定合并这两个项目,新项目被命名为 Selenium WebDriver,也就是 Selenium 2.0。

        特点:WebDriver 成为默认的工具,而 Selenium RC 被逐渐废弃(还没完全放弃)。

Selenium 3.0

        2016 年,Selenium 3 发布。这个版本并没有引入新的工具,主要加强了对浏览器的支持。相较 Selenium 2 的主要的变动有:

  • 完全移除了 Selenium RC。
  • WebDriver 暴露一个供浏览器接入的 API,通过各浏览器厂商提供的 Driver 来接入。
  • 将 Firefox Driver 剔除(之前 Firefox Driver 是内置的)。
  • 支持 Firefox 通过 GECKO Driver 来接入 Selenium。
  • 通过 Apple 提供的 Safari Driver,Selenium 可以支持 Safari 接入。
  • 通过 Edge Driver 支持 IE 接入。

Selenium 4.0

        2021 年,Selenium 发布 Selenium 4。 在 Selenium 3 中,与浏览器的通信基于 JSON-wire 协议,因此 Selenium 需要对 API 进行编解码。而 Selenium 4 遵循 W3C 标准协议,Driver 与浏览器之间通信的标准化使得他们可以直接通信。

除此之外,Selenium 4 还做了很多改动。包括:

  • 优化了对浏览器的支持。
  • 使用新的设计优化了 Selenium Gird。
  • 标准化了 Selenium 的文档(你敢信从 Selenium 2.0 开始,文档就没更新过…)。
  • IDE 中的 CLI Runner 变更为基于 NodeJS(之前是 HTML Runner)。
  • Client 和 Driver 支持了新的元素定位 API。
  • 支持屏幕截图。
  • 改进了 Chrome Dev Tools。之前 Chrome Driver 直接继承自 Remote Web Driver 类,现在继承自 Chromium Driver 类,这个改动使得 IDE 开发可以使用更多的 API。

演进过程图

selenium工作原理

         c/s架构,客户端和服务器通过http请求交换信息(selenium/webdriver/remote/remote_connection.py 里的_request()),通过对应的浏览器driver控制浏览器 (比如谷歌的是chromedriver),每次都有一个对话session和唯一标识 sessionID

工作流程

  • 编写测试脚本:用户使用支持的编程语言编写测试脚本,调用 Selenium 提供的 API。
  • 调用浏览器驱动:测试脚本通过 WebDriver API 调用相应的浏览器驱动。
  • 执行浏览器操作:浏览器驱动接收命令后,控制实际的浏览器执行相应的操作。
  • 返回结果:浏览器执行操作后,将结果返回给浏览器驱动,驱动再将结果返回给 WebDriver API,最终返回给用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704454.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

43k Star!推荐一款功能强大的开源笔记软件!

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度,有此需求的小伙伴学起来! 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时&#x…

Unity | Spine动画动态加载

一、准备工作 Spine插件及基本知识可查看这篇文章:Unity | Spine动画记录-CSDN博客 二、Spine资源动态加载 1.官方说明 官方文档指出不建议这种操作。但spine-unity API允许在运行时从SkeletonDataAsset或甚至直接从三个导出的资产实例化SkeletonAnimation和Skel…

第189题|幂级数的展开的常规方法(二)|武忠祥老师每日一题

解题思路:将函数展开成幂级数有两种方法:一种是直接法(这种一般比较麻烦),一种是拆解成现有展开式展开(这种的特征一般是能因式分解)。 第一步: 这里看到 ln(1-x-2x^2) 将里面的式…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息: 使用Selenium打开目标网页,并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法(如xpath、CSS选择器等)来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

ctfshow SSRF 351-358

做题前,需要先学习关于ssrf漏洞的相关知识 小注意: 当使用 file_get_contents() 函数访问远程 URL 时,它会尝试获取该 URL 指向的资源的内容,并将内容以字符串的形式返回。 如果 b.php 文件是一个 PHP 文件,它包含的内容取决于该 PHP 文件…

【LInux】<基础IO> 文件操作 | 文件描述符 | 重定向

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

【环境安装】nodejs 国内源下载与安装以及 npm 国内源配置

前言 Node.js 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境,它能够使 JavaScript 在服务器端运行。它拥有强大的包管理器 npm,使开发者能够轻松管理和共享 JavaScript 代码包。 在中国,由于众所周知的原因,我们可能会…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

湖南大学OS-2018期末考试(不含解析)

前言 不知道哪里翻出来的一张,看着确实像期末考卷,暂且放一下。或许做过,或许没做过。 总之答案不记得了。做完可以评论区发一下或者找我发出来。 共6道大题。 一、(30%) 1. (6%) 进程间通信的两种方法分别是什么&…

代码随想录算法训练营第三十一天|455.分发饼干,376. 摆动序列,53. 最大子序和

455.分发饼干 优先把小饼干分给胃口值小的&#xff0c;或者是把大饼干分给胃口大的。 376. 摆动序列 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0; // 当前一对差值int preDiff …