软件测试正在不断升级和完善,以适应所开发的软件应用的复杂性。这有助于在市场上提供高质量且无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架构转变,它提供了一个更为稳定的测试自动化平台。这简化了测试流程,并使调试和产品增强变得简单。