Selenium4版本新功能介绍

https://www.selenium.dev/downloads/
https://www.selenium.dev/documentation/

本文中主要介绍 Selenium 4 中对核心组件所做的改进以及它引入的新功能。

Selenium4版本历程

  • 2019 年 5 月发布初始 alpha 版本(4.0.0.alpha1)
  • 2021 年 6 月发布beta版本(4.0.0.beta4)
  • 官方稳定版Selenium 4 版本尚未公布

Selenium4安装:

Python版

pip install selenium==4.0.0.b4

Java-Maven版

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <!--Selenium 4 Driver-->
        <version>4.0.0-beta-4</version>
    </dependency>
</dependencies>

核心组件的改进

Selenium 4 WebDriver 改进

  • WebDriver 的主要变化是 WebDriver API 已完全符合 W3C。这种标准化使 WebDriver 能够直接与目标浏览器通信。

  • WebDriver 的 W3C 标准化导致 JSON Wire Protocol协议贬值。不过它不会影响现有用户。

Selenium 4 IDE 改进

Selenium IDE 用于录制功能,录制用户行为来构建测试用例和脚本。

IDE 的改进特性如下:

  • 控制流改进允许用户在测试用例中合并条件语句和循环。
  • 改进了代码导出功能。可以根据所选语言导出代码块
  • 改进了元素定位功能。IDE 现在能够在网页中定位难以找到的元素

Selenium Grid改进

  • Selenium Grid 使用户能够使用集线器和节点模型在各种浏览器和设备上并行运行测试。在 Selenium 4 中,Grid通过 Docker 支持和轻松部署在 Kubernetes 集群上的能力得到了改进。这种容器化方法允许用户轻松地将测试工作负载与多个容器一起分发,而无需依赖物理或虚拟机。

  • Selenium 4 Grid 将提供三种部署方法:

    • 独立
    • 集线器和节点方法
    • 容器化方法

Selenium 4 中的功能改进

W3C标准化

  • Selenium WebDriver 采用标准化的 W3C 协议与浏览器进行通信。由于 Chrome 和 firefox 等主要浏览器驱动程序已经遵循 W3C 标准,因此将 W3C 作为默认协议使 Selenium 能够直接与浏览器通信。

  • W3C 协议成为 Selenium 4 中的默认协议,JSON Wire Protocol将被弃用,对 Opera 和 PhantomJS 的本机支持将被删除。由于 Opera 浏览器现在基于 Chromium,因此想要在 Opera 上测试其实现的用户可以使用 chromedriver。此外,PhantomJS 用户可以在无头的 FireFox 或 Chrome 上进行测试,作为 PhantomJS 的替代方案。

更新的操作 API

Selenium 4 更新了 Actions 类 (API),它模拟鼠标、键盘的用户输入,例如单击、双击等。以下是 Actions 类新引入的方法列表。

  • click(WebElement)

    • 单击特定的 Web 元素,它将替换 moveToElement(onElement).click()
  • clickAndHolde(WebElement)

    • 单击元素并保持单击而不释放。此方法将替换 moveToElement(onElement).clickAndHold()
  • contextClick(WebElement)

    • 右键单击操作的默认方法并替换 moveToElement(onElement).contextClick()
  • doubleClick(WebElement)

    • 对元素执行双击操作并替换 moveToElement(element).doubleClick() 方法
  • release()

    • 在当前光标位置释放鼠标左键单击。随着 Selenium 的更新版本,它已从 org.openqa.selenium.interactions.ButtonReleaseAction 类移至主要 Actions 类。

相对定位器

Selenium 4 引入了一种使用相对定位器在页面上定位 Web 元素的便捷方法。可以使用友好名称来调用这些相对定位器,例如:

  • to left of(在...左边)
  • to right of(在...右边)
  • above(在...上面)
  • below(在...下面)
  • near(附近)

允许用户根据网页元素相对于其他元素的视觉位置来定位网页元素。举个简单的例子,如果一个表单中有两个按钮(提交和取消)彼此靠近,我们可以简单地调用“To right of”方法来定位另一个按钮

submitButton = driver.find_element(By.ID, "submit")
cancelButton = driver.find_element(with_tag_name("button").
                                   to_right_of(submitButton))

多窗口和标签管理

Selenium 4 的“newWindow”方法允许用户简单地创建新窗口或在选项卡之间切换,而无需创建单独的 WebDriver 对象并使用 WindowHandle 方法执行切换操作。

例子

打开一个新标签

driver.switch_to.new_window( 'tab' )

打开一个新窗口

driver.switch_to.new_window( 'window' )

Chrome 开发工具协议

Selenium 4 为Chrome DevTools 协议提供原生支持,允许用户利用原生 Chrome 开发工具和属性,如分析器、网络监控、缓存等。

这些原生集成使用户能够使用 DevTools API 执行各种任务,例如网络性能模拟和地理定位测试,同时快速解决任何错误。

示例 - 地理定位仿真

from  selenium  import  webdriver
from  selenium.webdriver.chrome.service  import  Service`
def  geo_location_test (): `
    driver  =  webdriver.Chrome(executable_path=G:\\chromedriver\\chromedriver.exe' ) 
    # 创建地理位置
    map_coordinates  =  dict({ 
        " latitude" :  38.134557 , 
        "longitude" :  - 122.709826 , 
        "accuracy" :  100 
        }) 
    # 模拟位置
    driver.execute_cdp_cmd( "Emulation.setGeolocationOverride" , map_coordinates) 
    # 导航到网站
    driver.get( "https://www.google.com" ) 

用选项替换所需的功能

在 Selenium 4 中,用于定义测试环境(例如浏览器名称、版本、操作系统)的 Desired Capabilities 被选项对象替换。
这些选项是特定于浏览器的,用户必须创建一个具有测试环境要求的选项对象并将其传递给 WebDriver。下面的列表显示了主要 Web 浏览器的选项对象。

Chrome – ChromeOptions
Microsoft Edge – EdgeOptions
Firefox – FirefoxOptions
Safari – SafariOptions
Internet Explorer (IE) – InternetExplorerOptions

示例 - Chrome 选项
from  selenium.webdriver.chrome.options  import  Options 
browser_options  =  Options() 
browser_options.headless  =  True 
driver  =  webdriver.Chrome(executable_path= 'G:\chromedriver\chromedriver.exe' ,options=browser_options)

改进的文档

Selenium 4 的另一个可用性改进是增强的文档。Selenium 4的官方文档得到了改进,提供了清晰的解释、各种语言的代码片段以及易于访问和搜索的文档部分。

posted @ 2021-09-13 21:14  我是测试呀  阅读(1131)  评论(0编辑  收藏  举报