你需要知道的 Selenium4 新特性

news2024/11/15 6:40:53

插入图片

前言

最近又用到了Selneium,发现已经来到了 4.9+ 版本了。本篇文章来介绍下它较比 Selenium3 的一些新特性。

记录下,当是做笔记了。
最令人惊喜的是,Selenium4 会自动回收浏览器资源。


本文所使用的 Selenium 版本为 4.9.9



知识点📖📖

作用链接
WebDriver文档https://www.selenium.dev/zh-cn/documentation/webdriver

更新模块

  • 使用Selenium4,要求 Python版本为 3.7 或者更高。
pip install --upgrade selenium

新特性🧐🧐

这里只展示常用到的一些特性。具体的可以通过上面给出的官方文档去进行系统的学习。

1. 定位语法

大体上一致,变化不大。但是 Selenium4 不支持 Selenium3 的这种定位方法。

在Selenium3中,

driver.find_element_by_xpath('demo')
driver.find_elements_by_xpath('demo')

而在Selenium4中,

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, "demo")
driver.find_elements(By.XPATH, "demo")

2. 相对定位器

使用JavaScript函数 getBoundingClientRect() 来确定页面上元素的大小和位置,并且可以使用此信息来定位相邻元素。

Selenium 4引入了相对定位器。当不方便定位到一个元素,但却可以定位到该元素在空间上的其它元素。这个时候就可以使用相对位置去定位(用于辅助定位,还是很不错的。

以下面的图片为例(共六个元素:

  • 它们的标签属性值如下所示
元素TAG_NAMEID
Email Address标签lbl-email
邮箱输入框input
Password标签lbl-password
密码输入框input
Cancel按钮buttoncancel
Sunmit按钮buttonsubmit

在这里插入图片描述

导入模块

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

Above ☝

定位位于 Password标签上面的 邮箱输入框

passwd_label = driver.find_element(By.ID, 'lbl-password')

element = driver.find_element(locate_with(By.TAG_NAME, 'input').above(passwd_label))

Below 👇

定位位于 Email Address标签下方的 邮箱输入框

email_label = driver.find_element(By.ID, 'lbl-email')

element = driver.find_element(locate_with(By.TAG_NAME, 'input').above(email_label ))

Left of 👈

定位位于 Submit按钮 左边的 Cancel按钮

btn_submit = driver.find_element(By.ID, 'submit')

element = driver.find_element(locate_with(By.TAG_NAME, 'button').to_left_of(btn_submit))

Right of👉

定位位于 Cancel按钮 右边的 Submit按钮

btn_cancel = driver.find_element(By.ID, 'cancel')

element = driver.find_element(locate_with(By.TAG_NAME, 'button').to_right_of(btn_cancel))

Near 🤝

定位位于 Cancel按钮 旁边的 Submit按钮

btn_cancel = driver.find_element(By.ID, 'cancel')

element = driver.find_element(locate_with(By.TAG_NAME, 'button').near(btn_cancel))

3. 弃用消息

已弃用⚡

这里 chromedriver.exe 驱动文件与 .py 文件在用一个目录下,

下面是 Selenium3 的创建一个浏览器的写法。

Selenium3

from selenium import webdriver

CHROMEDRIVER_PATH = './chromedriver.exe'

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)



这份代码在 Selenium4 执行,会有有一个弃用警告

  • DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  • 弃用警告: executable_path已弃用,请传入一个Service 对象

在这里插入图片描述

新特性✨

所以在 Selenium4 ,创建一个浏览器的写法如下:

Selenium4

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

CHROMEDRIVER_PATH = './chromedriver.exe'

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
service = ChromeService(executable_path=CHROMEDRIVER_PATH)
driver = webdriver.Chrome(service=service, options=options)

4. 自动回收浏览器资源

跟一下 Selenium4 的源码,可以看到以下:

  • 在 程序运行结束之前,这里会停止 Service 服务,于是 浏览器资源就释放了~
  • 这跟我们手动调用 driver.service.stop() 是一样的。

在这里插入图片描述

保持浏览器的打开状态✨

detach 参数设置为 true 将在驱动过程结束后保持浏览器的打开状态。

  • 将这一行代码添加到 options 中即可~
options.add_experimental_option("detach", True)

总结🐱‍🏍🐱‍🏍

本文章介绍了Selenium 4相对于Selenium 3的一些新特性和变化。

  • Selenium 4 可以自动回收浏览器资源,不需要手动停止服务,使得代码更加简洁;
  • 定位语法方面,Selenium 4引入了新的定位方法,使用By类来替代之前的find_element_by系列方法;
  • Selenium 4还引入了相对定位器,通过使用JavaScript函数getBoundingClientRect()可以定位到页面上元素的相对位置,这对于辅助定位非常有用
  • 文章还介绍了一些已经弃用的特性,并给出了新的替代方法。

Selenium4挺好的,拥抱变化~

后话

本次分享到此结束,
see you~~🏹🏹

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

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

相关文章

开发一个收废品小程序步骤

随着环保意识的提升和可持续发展的迫切需求,废品回收成为了一个重要的议题。预约上门回收小程序的开发为用户提供了方便、快捷的废品回收服务,促进了废品资源的再利用和环保行动的推进。本文将介绍开发预约上门回收小程序的流程,以帮助开发人…

java12--本章作业

1. 第1题 public class Hello{public static void main(String[] args){Person[] persons new Person[3];persons[0] new Person("zsq", 18, "学生");persons[1] new Person("zzq", 19, "大学生");persons[2] new Person("zq…

【leetcode】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 1、问题描述2、解决方案2.1、动态规划2.1.1、问题分析2.1.2、代码实现 2.2、单调栈 1、问题描述 1130. 叶值的最小代价生成树 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。数…

一文3000字实现基于Selenium+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…

2.4 IDEA开发词频统计项目

一、词频统计准备工作 (一)启动集群的HDFS与Spark 启动HDFS服务 启动Spark集群 (二)在HDFS上准备单词文件 在master虚拟机上创建单词文件 - words.txt 将单词文件上传到HDFS指定目录/wordcount/input 二、本地模式运行Sp…

RCE漏洞演示,墨者靶场

#案列演示 打开墨者靶场,黑盒#命令注入执行分析 这个功能点有这么个功能,进行类似的像我们电脑上ping命令,这相当于就满足了命令,明显可能出现命令执行漏洞,可控变量和漏洞函数都存在。第一要去分析是什么操作系统&am…

批量 ping 网段的终极方法

我们分析和判定网络故障,如果有 10 设备,100 台设备,1000 台设备怎么办?一个个 ping 过去人都要疯掉了,这种情况在大型网络中我们有可能遇到,那怎么办呢?来听听海翎光电小编的一点看法吧&#x…

Spark写入Hive报错Mkdir failed on :com.alibaba.jfs.JindoRequestPath

1. 报错内容 23/05/31 14:32:13 INFO [Driver] FsStats: cmdmkdirs, srcoss://sync-to-bi.[马赛克].aliyuncs.com/tmp/hive, dstnull, size0, parameterFsPermission:rwx-wx-wx, time-in-ms32, version3.5.0 23/05/31 14:32:13 ERROR [Driver] ApplicationMaster: User class …

八大技术架构——升级之路

目录 一、单机架构 简介 工作原理 架构优缺点 相关软件 二、应用数据分离架构 简介 工作原理 架构优缺点 三、应用服务集群架构 简介 出现原因 工作原理 架构优缺点 相关软件 四、读写分离/主从分离架构 简介 工作原理 架构优缺点 相关软件 五、冷热分离架…

JMeter数据库性能测试指南:全面掌握基础操作

1.网络请求时间 2.数据库查询的时间 数据库性能指标 TPS:每秒事务数(一秒钟服务器处理的事务数,事务指,请求出去到响应回来的整个过程的时间) QPS:每秒查询量(就是数据库每秒执行的SQL数量,包含insert/…

239:设置extent:bbox,限制瓦片图的加载范围,不加载空白瓦片

第239个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载geoserver发布的数据,这里主要介绍extent,设置bbox附加载layer上,目的是bbox在可视范围内才加载瓦片,否则不加载,好处是不用加载空白的瓦片数据。 直接复制下面的 vue+openlayers源代码,操作…

Odoo 16的docker部署以及vscode环境配置

之前一直使用Odoo源码配置开发环境,安装的步骤比较多,费时。趁着升级到16版本的机会,尝试使用docker快速配置Odoo的VSCode开发环境。 1 系统环境 (1)操作系统:ubuntu 20.04 Alternative downloads | Ubu…

Eclipse 教程 完结中

Eclipse 快捷键 关于快捷键 Eclipse 的很多操作都提供了快捷键功能,我们可以通过键盘就能很好的控制 Eclipse 各个功能: 使用快捷键关联菜单或菜单项使用快捷键关联对话窗口或视图或编辑器使用快捷键关联工具条上的功能按钮 Eclipse 快捷键列表可通过…

可节省60% MCU开发成本的NV080D-S8,单片机语音芯片在恒温碗上的应用

社会在不断进步,科技在不断发展,如今的恒温碗不仅带有温度显示功能,更附带有语音播报,能更好地知晓当前饭菜,变凉或过烫的情况,有效避免伤害宝宝脆弱的肠胃; 广州九芯电子推出了一款&#xff0c…

dynamic-datasource动态数据源学习

学习链接 spring整合mybatis的核心思路 & 数据源动态切换 & 多数据源事务控制 - 自己的链接(本篇文章的上篇) Mybatisplus生成代码配置 & p6spy打印sql & mybatis日志打印 & mybatisplus用法 dynamic-datasource-spring-boot-sta…

LabVIEWCompactRIO 开发指南第六章44 同步模块

同步模块 某些应用(如振动或声音测量)需要通道之间的高电平(低于100nS)同步。本节讨论基于增量Σ的模块和扫描(SAR)模块的时序和同步。任何未被归类为三角积分的NIC系列I/O模块都被归类为SAR。 同步增量西…

ThreadLocal源码

介绍 ThreadLocal是一个线程的本地变量,也就意味着这个变量是线程独有的,是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。 但是,这种解决多线程安全问题的方式和加锁方式(synchronized、Lock) 是有本质的区…

过来人建议:强烈安利本科生都去学Java编程!现在转行还不晚!

为什么标题这么说呢,因为Java的工资香啊,刚入门的小白就有 1w,转正后更多,而且越老越吃香! 我们学一门技术在身,走到哪里都不怕,java是技术岗,不带销售性质,加班要分公司…

unity与oculus quest开发设置流程

目录 预准备quest项目的构建PC运行参考文章 版本: unity:2021 adb(保证用USB连接PC和头显的时候能允许调试和数据访问) macOS 当USB连接之后,需要带上头显将是否允许数据调试和访问的对话框选择允许。 文件中assets放…

2.6 Hello World 及简单语法规则

2.6 Hello World 及简单语法规则 新建文件夹,用于存放代码 新建一个Java文件 早期我们只是会建立txt文本文件,或者word,Java文件的后缀名是.java 新建Hello.java文件 // 输入Java代码public class Hello{public static void main(String[…