为何Selenium这么火?

今天给大家带来的主题是自动化测试框架Selenium,话不多说,直接开始!

1.什么是 Selenium 自动化测试

Jason Huggins 于 2004 年创建了一个 JavaScript 框架,旨在将其从重复的手动测试中解放出来。 最初命名为 JavaScriptTestRunner 的产品可以直接在浏览器中执行测试,驱动页面上的交互,并在无需手动输入的情况下重新运行。

这个 JavaScript 工具在 Huggins 意识到它的潜力后开始流行,将其开源并重新命名为 Selenium Remote Control。 Selenium 的创新之处在于:之前没有其他任何工具允许测试人员使用他们选择的编程语言与浏览器对话。

然而,很快浏览器对 JavaScript 应用了安全限制,无法充分发挥该工具的全部功能。 那时,谷歌是 Selenium 的狂热用户,但工程师们在诸多限制方面苦苦挣扎。 其中有一个工程师叫 Simon Stewart,他开始研究一种可以与浏览器本地对话的产品,称之为 WebDriver。 Selenium 与 WebDriver 相结合,从此改变了至此以后十多年来软件测试的方式。

目前 Selenium 在 Github 上有超过 26.3k 的 star、7.5k 的 fork、超过 195k 的项目依赖它,代码贡献者达到了 670+,NPM 周下载量达到了 1764K,是前端自动化测试领域的佼佼者。

2.Selenium 套件开发和基础设施

Selenium 系列中的第一个产品是 Selenium Remote Control(现在称为 Selenium 1)。 由于其上述限制以及随后与 WebDriver 的合并,并成功孕育了 Selenium 2,它很快就被弃用并且不再受支持。

2016 年,Selenium 3 发布,将 Selenium RC 标记为遗留包,同时扩展了支持的浏览器列表和移动测试功能。

2021 年 2 月,Selenium 4 的第一个测试版发布,开发者更新了文档并重写了服务器。 虽然新版本有一些元素已弃用,但添加了期待已久的新功能,例如:相对定位器、从 JSON Wire Protocol 到 WebDriver W3C 协议的转换,以及 Chrome 调试功能。

整个 Selenium 基础设施可以通过下图可视化,需要注意的是三个得到社区大力支持和认可的主要产品:Selenium WebDriver、Selenium IDE 和 Selenium Grid。

2.1 Selenium WebDriver (Selenium 4)

Selenium WebDriver 是一种用于 web 应用程序的自动化测试工具,它提供了一套友好的 API。webDriver 完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动。

Selenium Webdriver 是通过各种浏览器的驱动(web driver)来驱动操作浏览器,成功后会返回一个 WebDriver 实例对象,通过它的方法,可以控制浏览器,通过元素定位,driver 找到该元素并返回一个该元素的 WebElement 对象,然后再调用它的方法,就可以对其进行操作了,比如:输入内容,点击按钮等。

目前,Selenium WebDriver 是 W3C 的推荐标准:

  • WebDriver 被设计成一个简单和更简洁的编程接口。
  • WebDriver 是一个紧凑的面向对象的 API。

下面是使用 WebDriver 自动化 Microsoft Edge 浏览器的示例:

const { Builder, By } = require('selenium-webdriver');
(async () => {const driver = await new Builder().forBrowser('MicrosoftEdge').build();try {await driver.get('https://bing.com');const element = await driver.findElement(By.id('sb_form_q'));await element.sendKeys('WebDriver');await element.submit();await driver.sleep(5000);} finally {await driver.quit();}
})();

2.2 Selenium IDE

如果想创建快速错误重现脚本,或者创建脚本来帮助自动化辅助探索性测试,那么可以使用 Selenium IDE, 一个 Chrome、Firefox 和 Edge 附加组件,可以对与浏览器的交互进行简单的记录和回放。

然而,许多官方和非官方插件也允许开发者构建一个生产就绪的工具,这对觉得 Selenium WebDriver 门槛太高的公司来说,使用带有一些插件的 IDE 可能是一个可行的解决方案。

Selenium IDE 具有以下明显特征:

  • Web 就绪 :通过简单的解决方案,可快速编写可靠的端到端测试,开箱即用,适用于任何网络应用程序。
  • 轻松调试 :使用丰富的 IDE 功能(如设置断点和异常暂停)享受更轻松的测试调试。
  • 跨浏览器执行 :使用 Selenium IDE 的命令行运行程序在任何浏览器/操作系统组合上并行运行测试。
端到端测试或E2E测试:是在移动应用程序开发周期中进行的一种性能测试,产品的所有功能都从一端到另一端进行测试,以确保整个应用程序流程正常运行。事实上,E2E测试的主要目标之一是为站点提供有关用户体验的上下文。模拟真实用户体验,并对所有集成组件进行测试验证。

2.3 Selenium Grid

如果想通过在多台机器上分布和运行测试来进行扩展,并从一个中心点管理多个环境,从而轻松针对大量浏览器/操作系统组合运行测试,那么可以考虑使用 Selenium Grid。

Selenium Grid 允许开发者同时在多台机器和浏览器上运行并行测试(比如:一台机器运行 Firefox,另一台机器运行 Chrome ),工具的主要功能是节省时间。 如果必须运行 100 个测试,如果使用 Selenium Grid 设置四台虚拟机或物理机,那么只需要花费大约四分之一的时间。

通过 Selenium Grid 可以轻松实现开发者的以下述求:

  • 提供一种在多台机器上并行运行测试的简单方法
  • 允许在不同的浏览器版本上进行测试
  • 启用跨平台测试

3.Selenium 使用

下面的示例和其他示例包含在 example 目录中,下面是使用 selenium 的一个简单示例:

const { Builder, Browser, By, Key, until } = require('selenium-webdriver');(async function example() {let driver = await new Builder().forBrowser(Browser.FIREFOX).build();try {await driver.get('https://www.google.com/ncr');await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);await driver.wait(until.titleIs('webdriver - Google Search'), 1000);} finally {await driver.quit();}
})();

Selenium 还提供了 Builder 类,Builder 类是配置新 WebDriver 实例的一站式 store。 构建器允许在一个流程中设置所有选项,而不是让代码因各种浏览器而混乱。 当调用 Builder#build() 时,与所选浏览器无关的所有选项都将被删除:

const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const firefox = require('selenium-webdriver/firefox');
let driver = new webdriver.Builder().forBrowser(webdriver.Browser.FIREFOX).setChromeOptions(/* ... */).setFirefoxOptions(/* ... */).build();

为什么要配置与目标浏览器无关的选项? Builder 的 API 定义了默认配置, 可以通过 SELENIUM_BROWSER 环境变量在运行时更改目标浏览器。 例如,example/google_search.js 脚本配置为针对 Firefox 运行,开发者只需更改运行时环境即可针对其他浏览器运行该示例:

// cd node_modules/selenium-webdriver
node example/google_search
SELENIUM_BROWSER=chrome node example/google_search
SELENIUM_BROWSER=safari node example/google_search

4.Selenium 的优点

Selenium 的优点可以从以下几个维度拆开来看。

4.1 免费

Selenium 不是市场上唯一的自动化测试工具,但它是唯一可以与付费产品竞争的免费工具。 Selenium 的开源使得具有陡峭学习曲线的工具成为初创公司和独立开发人员的福音。

4.2 与敏捷、DevOps、持续交付工作流集成

Selenium 的本质属于敏捷、DevOps 或持续交付背后的主要原则。由于 Selenium 可以跨所有平台移植并且通常不需要学习新语言,因此 Selenium 具有无可比拟的灵活性。

Selenium 可轻松与各种开发平台集成,例如:Jenkins、Maven、TestNG、QMetry、SauceLabs 等。使用 Selenium Grid 等进行的并行、跨浏览器测试,允许开发人员更快地接收反馈并立即处理更改。

4.3 支持移动测试

使用 Selenium,还可以测试本机、hybrid 或 Web 移动应用程序(需要额外软件)。 比如:Appium 和 Selendroid,都基于 Selenium。

这两种工具都是开源的,并且有强大的社区支持。 主要区别在于 Appium 支持 iOS、Android 和 Windows 设备,而 Selendroid 只专注于 Android。 Selendroid 还打包了 Appium,因此当测试 Android 2.3 到 4.3 版本时,程序会自动切换到 Selendroid。

除此之外,Robotium、ios-driver 等也是自动化场景值得深入探索的工具。

4.4 广泛的语言支持、平台和浏览器

Selenium 提供的灵活性在测试自动化领域几乎是无与伦比的。 首先,Selenium 支持十多种语言,其中包括: Java、Ruby、C#、PHP、JavaScript 和 Python 等这些当今最常用的编程语言。 Selenium 也是唯一涵盖 Linux 测试的主流工具。

同时,Selenium 也支持了包括:Firefox、Chrome、IE、Edge、Safari、opera、HTmlUnit 等大多数的主流浏览器。

4.5 庞大的社区

根据 Enlyft 的统计,有超过 55k 的公司使用 Selenium ,其中就包括谷歌和众多初创公司。Selenium 在所有软件测试工具中占据了 27.48% 的市场份额,其最接近的竞争对手 Apache Jmeter 仅占据了 10% 以上。

因此,从这点来看,Selenium 确实值得成为自动化领域的佼佼者。

4.6 庞大的插件和扩展库

Selenium 可以通过各种插件扩展其能力,比如 Selenium 官方认可的插件,如: Appium 和 Selendroid 等,当然在 Github 上也有众多拿来即用的插件,可轻松用于与 Jenkins 或 Eclipse 等集成。

当然,这些插件不仅适用于 WebDriver,还适用于 Grid 和 Selenium IDE。

5.Selenium 缺点

5.1 陡峭的学习曲线

自动化测试趋势之一是无代码测试,允许没有任何编程知识的人执行测试。 一些测试工具,如: TestComplete、Ranorex 或 Tricentis 通过在代码层之上构建用户友好的 UI、 并支持在两种模式之间切换来提供此功能,同时也允许测试人员编写脚本接收反馈。

然而,Selenium 不允许无代码测试, 测试者需要掌握至少一种编程语言。 许多公司,尤其是初创公司,倾向于雇用最好的编码人员来编写产品功能,并让技术水平较低的人员参与自动化测试, 然而这不适用于 Selenium。

但是,这里仅指 Selenium WebDriver,因为使用更简单的 Selenium IDE 不需要任何编码技能,但有一定的局限性。

5.2 仅用于基于网络的应用程序

Selenium 是一种不能用于自动化桌面应用程序测试的工具,因为它无法识别桌面应用程序中的对象。 Selenium 仅针对上文列出的各种浏览器对 Web 应用程序进行测试。

因此,要测试桌面应用程序,必须找到一个单独的工具,如 WinAppDriver 并将其与 Selenium 一起使用,或者一个综合测试工具,如 Katalon,它可以自动化基于 Web 和非基于 Web 的测试。

5.3 没有内置图像比较

在 QA 过程中,自动化图像验证存在困难。 判断图像是否正确显示在屏幕上的最简单且最有效的方法是手动检查。 虽然对于大多数产品来说,结合手动、自动测试很正常,但这是错误的一大来源,因为重复任务会导致测试人员减少检查。

此问题的常见解决方案之一是图像比较。 如果有一个图像模型,程序可通过将其与测试期间显示的图像进行比较。 比如:TestComplete、Ranorex、Katalon Studio 等等。

要在 Selenium 中执行此操作,需要第三方软件,比如: Sikuli 。 它是一种基于图像的识别工具,可以与 Selenium 很好地集成,但它并不是很准确。 另一个开源库是 OpenCV,它具有 C++、Python、Java 和 MATLAB 接口,并包含数百种用于计算机视觉和图像处理的算法。

5.4 没有报告能力

缺乏自动生成的报告是 Selenium 面临的最大挑战之一。 要捕获 Selenium 中的失败测试,必须在失败时截取屏幕截图,但是这远不是团队快速诊断问题所需的可读格式。 虽然不同的供应商提供具有数据驱动洞察力和团队合作工具集成的报告功能,但 Selenium 必须依赖第三方解决方案。

  • TestNG 在测试执行时创建两种类型的报告:详细报告和摘要报告,摘要提供简单的通过/失败数据,而详细报告有日志、错误、测试组等。
  • JUnit 使用 HTML 在 Selenium 中生成带有“失败”和“成功”指示符的简单报告。
  • Extent Library 是最复杂的选项:它创建测试摘要、包括屏幕截图、生成饼图等。
  • Allure 创建带有图表、时间线和分类测试结果的精美报告——所有这些都在方便的仪表板上。

Web自动化测试全套实战教程:Python+Selenium4环境搭建

 

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

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

相关文章

【数据结构—二叉树的链式结构实现】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、二叉树的存储结构 二、二叉树链式结构的实现 2.1手动构建一课树 2.2二叉树的遍历 三、二叉树链式结构的实现 3.1前序遍历(递归) 3.2中序遍历(递归) 3.3后序…

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…

第三方软件测试机构可提供哪些服务类型?如何收费?

随着高新技术的快速发展,软件企业将测试工作交由第三方软件测试机构进行已经成为了行业趋势,因为企业自身的大多精力都投入在产品开发上,第三方软件测试机构的存在也就极大的提供了便利。 第三方软件测试机构是区别于软件企业与软件需求方的…

fetch 流式请求

async function getStream() {try {let response await fetch(/chat/stream/你好?); // /chat/stream/后面跟问题if (!response.ok) {throw new Error(Network response was not ok);}const reader response.body.getReader();const textDecoder new TextDecode…

Spark内核解析-节点启动4(六)

1、Master节点启动 Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作 1.1脚本概览 下面是一个举例: /opt/jdk1.7.0_79/bin/java -cp /opt/spark-2.1.0/conf/:/opt/spark-2.1.0/jars/*:/opt/hadoop-2.6.4/etc/ha…

MatrixOne 完成与飞腾处理器的兼容互认

近日,矩阵起源超融合数据库 MatrixOne 企业版软件V1.0(简称 MatrixOne 企业版,下同)与飞腾两款处理器完成兼容性适配,此次适配测试覆盖两款处理器,分别是 FT-2000/64 和飞腾腾云S2500。测试显示 MatrixOne …

科研+临床观摩|牙科医生公派美国从事访问学者交流

很多临床医学专业的访问学者希望在访学从事科研的同时,能到医院进行临床观摩。对于这些申请者的要求,我们会尽量满足。本案例中的T医生,口语较弱,担心英语面试,最终我们为其取得了田纳西大学健康科学中心的邀请函&…

记模型训练损失为NAN

前段时间想把我模型的输入由DWT子带改为分块的图像块,一顿魔改后,模型跑着跑着损失就朝着奇怪的方向跑去了:要么突然增大,要么变为NAN。 为什么训练损失会突然变为NAN呢?这个作者将模型训练过程中loss为NAN或INF的原因…

数据模型中的“概念模型”、“逻辑模型”、“物理模型”区别

数据模型是数字化应用设计过程中非常重要的技术要素,通过数据模型可以提高企业各方沟通效率,实现数字化项目落地的规范性和架构统一性。 数据模型分为三个层级,抽象程度上由高到低依次是概念数据模型(Concept Data Model&#xf…

Java实战项目一:简易命令行计算器开发

文章目录 一、实战概述二、知识点概览(一)变量和数据类型(二)控制台输入输出(三)条件判断与逻辑结构(四)算术运算符(五)方法定义与调用 三、思路分析&#xf…

SoapUI参数传递操作详解

SoapUI 传递参数 本文章主要是通过例子,给大家讲解一下 SoapUI 发送请求时,如何带上参数~ 我们可以先了解下:SoapUI简介:了解这个流行的API测试工具 新建工程 首先新建一个工程,然后在里面进行后续的操作。 填写工程…

冥想第一千零二十七天

1.周三,早上送溪溪上学,带着溪溪的药给老师说了说。今天没有带饭,因为妈妈起来的晚了。 2.项目上全力以赴的一天,晚上健身房和朋友一起运动,朋友指导了器材。 3.晚上抢纪念币没有抢到。 4.感谢父母,感谢朋友…

java基础之-servlet

文章介绍了servlet,它的生命周期,又介绍了servlet的一个简单demo 一、是什么 servlet是一个运行在web服务器上的, 能接受和响应客户端http请求的,java程序 二、怎么用 一个简单的demo 1、在WEB-INF/web.xml创建一个servlet &…

java常见面试题:什么是流(Stream)?Java中的流有哪些操作?

流(Stream)是Java 8中引入的一个新特性,它提供了一种声明性方式来处理数据集合。流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。 在Java中…

okhttp网络请求工具

先依赖 implementation com.squareup.okhttp3:logging-interceptor:3.5.0 implementation com.google.code.gson:gson:2.8.0 import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; import an…

WPF 应用程序中实现单例模式

要在 WPF 应用程序中实现单例模式,确保应用程序在任意时刻只有一个实例运行,您可以在 App.xaml.cs 的 OnStartup 方法中检查是否已有应用程序实例在运行。如果是,那么可以阻止新实例的启动,并将焦点转移到现有实例,或者…

SSD PCIe接口综述

SSD 的接口当前以PCIe为主,因为其速度远快于SATA接口。 PCIe 特征 已经从PCIe1.0发展到了6.0, 其中3.0的双向带宽:单通道(Lane)为2GB/s, 32通道为64GB/s全双工模式,发送和接收通道可以同时工作(SATA为半双…

python3基础知识-学习目录

本次学习的内容是以python3.X为平台,详细的阐述python编程的基础知识和高级技巧。虽然之前学习过相关的知识,但是并未真正掌握python的原理,此次的学习更是为了加深自己的印象,并更深入的理解python的高阶知识。 为了学习效率更好…

【python入门】day12:bug及其处理思路

bug的常见类型 粗心 / 没有好习惯 思路不清 lst[{rating:[9.7,2062397],id:1292052,type:[犯罪,剧情],title:肖申克的救赎,actors:[蒂姆罗宾斯,摩根弗里曼]},{rating:[9.6,1528760],id:1291546,type:[剧情,爱情,同性],title:霸王别姬,actors:[张国荣 ,张丰毅 , 巩俐 ,葛优]},{r…

redis重启后数据丢失问题解决(亲测好用)

redis修改密码重启后发现redis中的数据丢失了 解决办法: 首先在redis的安装目录下查找重启之前的dump.rdb文件,发现只有当天的一个dump.rdb文件,确认不是重启备份的文件 然后我就全盘找一下dump.rdb的备份文件,找到前一天的备份…