Selenium4的新特性和案例

2024-10-20   出处: Medium  作/译者:Nazneen Ahmad / 溜的一比

软件测试正在不断升级和完善,以适应所开发的软件应用的复杂性。这有助于在市场上提供高质量且无bug的应用程序,并保证软件开发过程的顺利进行。为了满足这一需求,软件测试工具和框架也在不断发展,而Selenium正处在这一变革的前沿。

Selenium允许浏览器自动化,并被视为用于测试网站和Web应用程序的最常用的自动化测试框架之一。它于2004年作为"Selenium Core"发布,并逐步升级为不同的版本,包括Selenium 1(Selenium RC)、Selenium 2和Selenium 3。在2018年,Selenium的核心成员Simon Stewart宣布了Selenium 4的发布,这是最新版本的重大更新。2021年10月13日,Selenium 4.0正式发布,可以从其官方网站或GitHub下载。

Selenium凭借诸如增强的Selenium Grid、W3C标准化协议、新的API、相对定位器等功能,使其成为测试人员和质量分析师的热门选择。对于渴望了解Selenium新功能的人来说,快速回顾这些更新是必要的。

在这篇博文中,我们将详细探讨Selenium 4,并描述其主要特性,同时将其与上一个广泛使用的版本Selenium 3进行比较。

关于Selenium 4的一个简短介绍 Selenium 4是最新的广泛使用的开源测试自动化框架,专为Web应用程序设计。随着时间的推移,Selenium经历了多个版本的升级,增加了新特性并废弃了一些旧特性。

Selenium 1是一个成熟的框架,通过其JavaScript实现支持多种浏览器。Selenium 2将WebDriver与Selenium RC集成,结合了两者的优点并解决了各自的缺点。对于使用WebDriver API的用户来说,它作为一个无缝替换,主要的变化是从核心替换为后端WebDriver。Selenium 3.0已经达到了W3C标准的地位,使其成为Web和移动应用首选的测试工具。

Selenium 4 Beta 1代表了具有高级特性的最新版本,包括Selenium Grid、W3C兼容性、增强的IDE、新的API等。Selenium Grid架构在Selenium 4的最新版本中进行了重新设计。您可以运行并行和分布式测试节点以及中心节点。这为测试人员提供了编写全面可靠的Web应用程序测试脚本的能力,从而确保高质量软件应用的交付。

Selenium 4中有哪些新特性? Selenium 4引入了有价值的改进,包括相对定位器、增强的Selenium Grid架构以及改进的Selenium IDE。

然而,最重要的变化是WebDriver API的W3C合规性,确保了更稳定且不易出错的跨浏览器测试。这消除了在Selenium 3及更早版本中所需的通过JSON线协议编码和解码API请求的过程,简化了浏览器和测试脚本之间的通信。这意味着WebDriver可以直接与目标浏览器交互。

以下是一些值得注意的变化:

W3C WebDriver协议 主要地,Selenium 4的WebDriver完全符合W3C标准。现在,WebDriver API不仅限于Selenium,而且在各种自动化工具中找到了应用。在Selenium 3.0中,测试通过本地端的JSON线协议与浏览器终端节点通信,需要API的编码和解码。而在Selenium 4中,测试直接通过W3C协议通信,无需对API请求进行编码或解码。

改进的Selenium Grid Selenium Grid现在增强了对Docker的支持,简化了使用容器设置和扩展Selenium Grid的过程。它还支持IPv6地址和HTTPS通信,并允许使用TOML格式的配置文件。在Selenium 4中,Grid体验更加流畅,不再需要单独设置和启动中心节点。一旦您启动了一个Selenium服务器,Grid就可以同时作为中心节点和普通节点。

升级的Selenium IDE 现在可以在其官方网站上下载支持Chrome的Selenium IDE。作为一个记录和回放工具,Selenium IDE现在拥有更先进的功能集,包括一个新的插件系统。浏览器厂商可以轻松地将他们的定位策略和插件插入到新的Selenium IDE中。基于NodeJS的新CLI运行器支持WebDriver回放和平行执行,提供了诸如耗时、通过和失败的测试用例数量等重要信息。

增强的Selenium Manager Selenium Manager现在功能更加强大,具有更新的界面、实时监控和高级查询功能。这些改进增强了测试人员对自动化测试的控制,确保了无缝且高效的操作体验。

Action类中的更改 在Selenium 4中修改了Action类,该类负责执行如鼠标和键盘动作之类的高级用户交互。这些修改增强了Action类的功能,提高了其可用性和功能性,最终使它在自动化脚本中更加强大和用户友好。在Selenium 4中,Action类接收了几个新方法的设计,用于模拟通过鼠标和键盘对网页元素进行输入操作。这些附加的方法提供了一种更简单直观的方式来执行常见操作。一些整合到Selenium 4 Action类的新方法包括:

点击(WebElement element): 这个方法取代了先前的moveToElement(element).click()的方法,并允许直接点击特定的网页元素。

点击并保持(WebElement element): 这个方法取代了之前的moveToElement(element).clickAndHold()的方法,并允许在特定的网页元素上点击并保持而不释放点击。

右键点击(WebElement element): 这个方法取代了之前的moveToElement(element).contextClick()的方法,并允许在一个特定的网页元素上执行右键点击操作。

双击(WebElement element): 这个方法取代了之前的moveToElement(element).doubleClick()的方法,并方便地执行对特定网页元素的双击操作。

释放(): 这个方法最初属于org.openqa.selenium.interactions.ButtonReleaseAction类,在Selenium 4中已经被移到了Action类中。它的作用是在执行完一个动作之后释放按下的鼠标按钮。

在Selenium 4中哪些被废弃了? 在Selenium中,一些废弃的特性如下:

FindsBy 在org.openqa.selenium.internal包中找到并由RemoteWebDriver类实现的FindsBy接口现在经过了修改。相关的函数包括findElement(By)和findElements(By)。

注意:这些更改不会影响最终用户。通过使用By类,您仍然可以使用findElement(By)和findElements(By)。

Fluent Wait 对FluentWait中的方法进行了调整,例如withTimeout()和pollingEvery()。在Selenium 4中,对属于FluentWait类的方法withTimeout()和pollingEvery()进行了修改。pollingEvery()方法现在仅接受一个参数——Duration。这个Duration可以指定为Seconds、Milliseconds、NanoSeconds、Hours、Days等等。同样,withTimeout()方法也只接受一个Duration参数。

参考示例

Selenium 3中的FluentWait Selenium 4中的FluentWait 驱动构造器 一些驱动构造器已被废弃。Capabilities对象现在被Options替代。要与Driver类一起工作,您必须创建一个Options对象。

FirefoxDriver的Capabilities现在被FirefoxDriver FirefoxOptions替代。

ChromeDriver的Capabilities现在被ChromeDriver ChromeOptions替代。

InternetExplorerDriver的Capabilities现在被InternetExplorerDriver InternetExplorerOptions替代。

SafariDriver的Capabilities现在被SafariDriver SafariOptions替代。

EdgeDriver的Capabilities现在被EdgeDriver EdgeOptions替代。

Selenium 4的关键特性 一些Selenium 4可以利用来进行用户中心化测试的关键特性如下:

Selenium 4自带对Chrome DevTools协议的原生支持,使QA工程师能够利用Chrome开发属性,并利用Chrome DevTools提供的API来改进测试和解决bug。

最新版本带来了对带有hook的请求跟踪和日志记录的改进,为自动化工程师提供了增强的调试控制。

Selenium 4现在支持在两个不同的窗口上同时操作,这对于导航到新的窗口或标签页、打开不同的URL和执行动作非常有利。要在Selenium 4中创建并切换到一个新窗口,请使用newWindow()方法与WindowType.WINDOW。每个浏览器窗口在Selenium中都有一个唯一的WindowHandle或ID,这应该传递给switchTo().window()方法以便在不同的窗口之间切换。

Selenium 4文档全面涵盖了Selenium Grid 4、Selenium IDE和WebDriver W3C协议。自动化测试人员可以参考文档熟悉Selenium 4提供的新API。

相对定位器,也被称为友好的定位器,帮助在指定元素附近、左边、右边、上方和下方查找WebElements。相对定位器方法与withTagName(在Selenium 4 Java中)或with_tag_name(在Selenium 4 Python中)兼容。Selenium 4引入了五个相对定位器:

above(): 用于识别位于指定元素正上方的web元素。语法:要识别某个定位器之上的元素:above(By locator);要识别某个具体web元素之上的元素:above(WebElement element)

below(): 用于确定位于指定元素正下方的web元素。语法:要确定位于特定定位器之下的元素:below(By locator);要确定位于特定web元素之下的元素:below(WebElement element)

toLeftOf(): 用于查找位于指定元素左侧的web元素。语法:要查找位于特定定位器左侧的元素:toLeftOf(By locator);要查找位于特定web元素左侧的元素:toLeftOf(WebElement element)

toRightOf(): 用于识别位于指定元素右侧的web元素。语法:要识别位于特定定位器右侧的元素:toRightOf(By locator);要识别位于特定web元素右侧的元素:toRightOf(WebElement element)

near(): 用于定位距离指定元素大约50像素远的web元素。距离可以作为方法参数中的选项来指定。语法:

near(By locator)

near(WebElement element)

near(By locator, int atMostDistanceInPixels)

near(WebElement element, int atMostDistanceInPixels)

现在,利用Firefox中的getFullPageScreenshotAs()方法,可以捕获完整的页面截图。但是,应该将它转换为FirefoxDriver实例而不是'TakesScreenshot'接口。示例代码:

File src = ((FirefoxDriver) driver).getFullPageScreenshotAs(OutputType.FILE);

Selenium 4中的Chrome驱动类扩展到了Chromium驱动。在Selenium 4的Chromium驱动类中,预定义的方法促进了对开发工具的访问。通过API可以执行各种操作,包括启用网络离线模式、启用网络在线模式、获取控制台日志以及加载安全网站。

Selenium WebDriver 4引入了增强的错误处理和报告机制,简化了测试执行期间的问题识别和解决。

Selenium 4提供了改进的日志记录和调试能力,使得QA工程师能够更有效地诊断和解决问题。它支持Chrome调试协议,允许与Chrome DevTools API进行交互,并直接从Selenium测试中访问高级调试功能。

Selenium 3 vs. Selenium 4 Selenium 3与Selenium 4的主要区别将帮助您了解Selenium的确切升级。其中一些区别如下:

特性 Selenium 4 Selenium 3
使用的协议 W3C标准协议 JSON线协议
Chrome驱动类继承 Chrome驱动类扩展至Chromium驱动类 Chrome驱动类扩展至RemoteWebDriver类
Selenium Grid 优化了GUI,并支持Docker 不支持Docker
Selenium IDE 增强了GUI并支持基于云的Selenium Grid Selenium IDE作为Firefox插件可用
自动化测试设置 测试者不需要每次都启动Hub和Node JARs 测试者总是需要启动Hub和Node JARs,在Selenium 3中这是一个困难的任务
易用性 由于简化了设置,因此用户体验得到改善 设置复杂,需要手动启动JARs
驱动兼容性 与多种浏览器有更好的兼容性 兼容性有限,尤其是对较新浏览器
远程WebDriver功能 利用更新的Remote WebDriver功能 依赖于旧版的Remote WebDriver功能
执行效率 由于优化的Selenium Grid而提高效率 由于缺乏Docker支持而效率有限
Selenium IDE的可访问性 在不同浏览器和平台上均可访问 作为Firefox插件,访问受限
维护开销 由于支持Docker而减少了维护开销 没有Docker支持,维护开销更高
文档和支持 改进了文档并有活跃的社区支持 文档可能过时,社区支持有限
总体进步 拥抱现代技术标准和进步 相对停滞,技术进步有限

如何从Selenium 3迁移到Selenium 4? 现在您已经熟悉了Selenium 4及其最近发布的新增特性,为了利用Selenium 4的能力,您需要从Selenium 3迁移到Selenium 4。您可以遵循以下一般步骤:

首先,您需要了解Selenium 4的关键特性、新改进和变更。为此,您可以参考Selenium的官方文档获取更多信息。

然后,您需要更新软件项目的依赖项以使用Selenium 4库。这意味着您需要在项目构建配置(如Maven、Gradle)中更新Selenium WebDriver、Selenium服务器及相关依赖项。

修改您的Selenium 3代码库以更好地适应Selenium 4的新变更。

众所周知,Selenium 4使用的是W3C WebDriver协议。因此,您需要确保您的代码与此协议兼容,因为它可能与Selenium 3中使用的JSON Wire协议有所不同。

您需要更新浏览器驱动(如ChromeDriver、GeckoDriver等)到与Selenium 4兼容的版本。检查官方浏览器驱动文档以获取推荐版本。

彻底测试您的应用程序使用Selenium 4的情况。您应该执行现有的测试套件来识别任何兼容性问题,并根据需要更新测试脚本。

如果您使用了Selenium Grid,请确保您的Grid设置与Selenium 4兼容。相应地更新Selenium Grid依赖项和配置。

如果您已经使用了带有Hub和Nodes的Selenium Grid或Selenium IDE,则需要将它们更新到支持Selenium 4的最新版本。

您应更新内部文档,并就Selenium 4中引入的变更向团队成员提供培训。这确保了迁移过程中大家的信息一致。

考虑采用逐步推广策略。您可以从小部分测试或非生产环境开始,以在完全迁移整个测试套件之前识别任何问题。

迁移后需要监控测试执行和应用程序行为。解决出现的任何问题,并根据需要迭代迁移过程。

在迁移过程中始终检查Selenium的官方文档和发行说明以获取最准确和最新的信息。

**结论** 本次博客讨论围绕Selenium 4澄清了它是最佳的Web自动化框架之一,利用浏览器支持、W3C协议集成和Selenium Grid实现了更好的可扩展性。Selenium 4 Beta的新版本允许开发者和软件测试人员拥有更好的软件测试体验,并确保软件应用的质量。

随着Selenium 4带来的Selenium WebDriver架构转变,它提供了一个更为稳定的测试自动化平台。这简化了测试流程,并使调试和产品增强变得简单。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
174° /1742 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章