Selenium 4新特性解析:关联定位器及其他创新功能

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 【10月更文挑战第6天】Selenium 是一个强大的自动化测试工具,广泛用于Web应用程序的测试。随着Selenium 4的发布,它引入了许多新特性和改进,使得编写和维护自动化脚本变得更加容易。本文将深入探讨Selenium 4的一些关键新特性,特别是关联定位器(Relative Locators),以及其他一些重要的创新功能。

Selenium 是一个强大的自动化测试工具,广泛用于Web应用程序的测试。随着Selenium 4的发布,它引入了许多新特性和改进,使得编写和维护自动化脚本变得更加容易。本文将深入探讨Selenium 4的一些关键新特性,特别是关联定位器(Relative Locators),以及其他一些重要的创新功能。
1111.png

关联定位器(Relative Locators)

在网页上,有时候我们很难直接通过ID、类名或CSS选择器来定位元素,特别是在动态生成的内容中。为了解决这个问题,Selenium 4引入了关联定位器,允许开发者基于页面上的其他元素来定位目标元素。

相对定位方法

  • above: 定位到某个元素上方的元素。
  • below: 定位到某个元素下方的元素。
  • to_left_of: 定位到某个元素左边的元素。
  • to_right_of: 定位到某个元素右边的元素。
  • near: 定位到靠近某个元素的元素。

示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

driver = webdriver.Chrome()
driver.get("http://example.com")

# 假设我们要找到位于“Sign In”按钮右侧的输入框
sign_in_button = driver.find_element(By.ID, "signin-button")
search_input = driver.find_element(locate_with(By.TAG_NAME, "input").to_right_of(sign_in_button))

print(search_input.get_attribute("id"))  # 打印输入框的ID属性

在这个例子中,我们首先找到了“Sign In”按钮,然后使用to_right_of定位器来找到其右侧的输入框。

改进的WebDriver W3C标准支持

Selenium 4现在默认使用W3C WebDriver协议,这带来了一些底层的变化,并且提升了与现代浏览器的兼容性。例如,Capabilities和Actions API都进行了更新以符合W3C标准。

示例代码

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['goog:chromeOptions'] = {
   
    'args': ['--headless', '--disable-gpu']
}

driver = webdriver.Chrome(desired_capabilities=capabilities)
driver.get("http://example.com")
print(driver.title)
driver.quit()

这里,我们指定了Chrome选项并启用了无头模式。

新窗口处理

在Selenium 4之前,切换到新打开的浏览器窗口可能会比较麻烦。现在,Selenium 4提供了一种更简洁的方式来处理新窗口。

示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://example.com")

# 打开一个新的标签页
driver.execute_script("window.open('');")
driver.switch_to.window(driver.window_handles[1])  # 切换到新的标签页
driver.get("http://another-example.com")  # 在新标签页加载另一个网站
print(driver.title)  # 打印新页面标题
driver.close()  # 关闭当前标签页
driver.switch_to.window(driver.window_handles[0])  # 切回原标签页

这段代码展示了如何打开新窗口,并在它们之间进行切换。

Chrome DevTools Protocol (CDP) 支持

Selenium 4还增加了对Chrome DevTools Protocol的支持,这意味着开发者可以直接与浏览器内部机制交互,获取性能数据、网络请求信息等。

示例代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import json

options = webdriver.ChromeOptions()
service = ChromeService(executable_path='/path/to/chromedriver')

driver = webdriver.Chrome(service=service, options=options)

# 启用Performance日志
capabilities = options.to_capabilities()
capabilities['goog:loggingPrefs'] = {
   'performance': 'ALL'}
driver = webdriver.Chrome(service=service, desired_capabilities=capabilities)

driver.get("http://example.com")

# 获取所有性能日志条目
logs = driver.get_log('performance')
for log in logs:
    message = json.loads(log["message"])["message"]
    if "Network.response" in message["method"]:
        print(f"Response received: {message['params']['response']['url']}")

driver.quit()

这个示例显示了如何启用性能日志记录,并从这些日志中提取网络响应的信息。

结论

Selenium 4带来了许多令人兴奋的新特性,如关联定位器、改进的WebDriver W3C标准支持、新窗口处理以及对Chrome DevTools Protocol的支持。这些改进不仅简化了测试脚本的编写,而且提供了更多控制和灵活性。对于任何希望提高其自动化测试效率和可靠性的团队来说,升级到Selenium 4是一个值得考虑的选择。

通过上述示例,您应该能够开始探索Selenium 4的新功能,并将它们应用到您的项目中。随着更多实践和经验的积累,您可以进一步挖掘这些特性的潜力,创造出更加高效和强大的自动化解决方案。

目录
相关文章
|
20天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
33 3
|
22天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
38 3
|
24天前
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
74 2
|
12天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
97 60
|
3天前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
14 7
C# 9.0 新特性解析
|
2天前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
11 2
|
5天前
|
PHP 开发者
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
|
5天前
|
安全 编译器 PHP
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用
|
8天前
|
Kubernetes Cloud Native 调度
云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性
Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。
|
15天前
|
PHP 数据安全/隐私保护 开发者
PHP 7新特性解析与实践
【10月更文挑战第20天】本文将深入浅出地介绍PHP 7的新特性,包括性能提升、语法改进等方面。我们将通过实际代码示例,展示如何利用这些新特性优化现有项目,提高开发效率。无论你是PHP新手还是资深开发者,都能从中获得启发和帮助。

推荐镜像

更多
下一篇
无影云桌面