当前位置: 首页 > news >正文

selenium 4.17正式发布,这几项更新值得关注

(全文约1400字,阅读约需4分钟,首发于公众号:测试开发研习社,欢迎关注)

两天前,selenium 正式发布了新版本 4.17,其中 python 版本的变化有更新更新值得关注

1. CDP 支持范围调整到 >118

CDP(Chrome DevTools Protocol)支持对 Chrome 进行深度的检测、检查、设置、调试和分析,能够完成 webdriver 协议和 JavaScript 代码无法实现的复杂功能。

selenium 4.17 不再支持 chrome 118 以下的版本,

当然,基于 webdriver 协议对浏览器进行自动化控制还是正常使用的

2. 为页面加载策略创建枚举类

页面加载策略(pageLoadStrategy)和元素定位策略(Element Locator strategies)、等待策略(Waiting Strategies),

并称 Selenium 中的三大策略。通过对策略的调整,可以提高 Web 自动化的执行速度,减少操作失败。

其中页面加载策略有 3 种选项:

  1. none:完成 HTML 下载后返回

  2. eager:完成 HTML 渲染后返回

  3. normal:完成资源(图片、CSS、JS)渲染后返回

页面加载策略的默认值为 normal,也就是等整个页面的各项资源都下载渲染后,开始执行下一行代码。

例如,腾讯网首页引用了大量资源文件,默认情况下定位一个新闻标题,耗时需要 5 秒多

图片

在调整了页面加载策略后,会放弃等待资源文件,马上执行下一行代码

(这时元素可能还没渲染出来)

再调整等待策略,在定位失败时不断重试,确保定位成功

这样,仅需 1 秒多即可完成定位

图片

注意这里的代码写法:

from selenium import webdriver
from webdriver_helper import get_webdriveroptions = webdriver.ChromeOptions() # 实例化options
options.page_load_strategy = 'none'  # 修改页面加载策略,提前返回driver = get_webdriver(options=options) # 起点浏览器时传递options

修改定位策略是给 options 的 page_load_strategy 赋值字符串,字符串难免会记错、写错。

本次Selenium 4.17 的更新中,创建了枚举类 PageLoadStrategy,在 IDE 中可以体验代码提示、自动补全,避免了记错写错的问题

图片

注意:在单页应用中,往往并不适合调整页面加载策略

3. 提高浏览器驱动的启动速度

简单来说,优化了 sleep 代码,节省了约 0.5 秒,

接下来看看优化的细节。

在之前的版本中,为了确保浏览器驱动启动成功有这样的处理逻辑:

  1. 启动子进程后,休眠 0.5 秒,然后判断是否启动成功

  2. 如果失败,重复第一步

  3. 如果失败 60 次,放弃启动,进行报错

有个哥们经过实验发现:顺利的情况下,浏览器驱动启动速度其实极快!

于是调整了休眠重试的机制:

图片

不再是每次重试,都等待固定的 0.5 秒

而是第一次等待 0.01,以后每次重试增加 0.05,直到 0.5 一次

这哥们还补充了个测试用例,优化之后正常情况下启动时间 <= 0.01

图片

对细节感兴趣的观众可以点击【查看原文】

注意,此处优化的是【浏览器驱动】的启动时间,不是【浏览器】的启动时间。

浏览器的启动时间耗费更久、波动更大

4. 变更记录全文

变更记录全文如下,你可以找对感兴趣的内容进一步了解:

Selenium 4.17.2

  • [Python] 修正 typing_extension 依赖以生成 wheel

Selenium 4.17.1

  • 在 setup.py 中修正拼写错误 (#13487)

Selenium 4.17.0

  • 添加页面加载策略枚举 (#13258)

  • 在升级版本时使用正确的文件名 (#13282)

  • 根据事件类型过滤记录的双向文本日志 (#12951)

  • 在 Selenium 管理器输入中添加 Python 以进行跟踪 (参见 #13288)

  • 根据尝试次数延迟等待服务启动 (#13321)

  • 使用 subprocess.DEVNULL 替代 open (os.devnull) 以避免泄漏文件句柄 (#13329)

  • 移除所有对 firefox-bin 的引用

  • 检查是否支持 Selenium Manager 的体系结构 / 平台组合 (#13381)

  • 移除扩展连接类和 webdriver.xpi 的其他用法

  • 移除 Edge 服务中已弃用的 verbose 参数

  • 移除 webdriver 中已弃用的 desired_capabilities 属性

  • 移除已弃用的应用程序缓存支持

  • 记录请求时截断大字符串

  • 更新 WPEWebKit 支持代码 (#13278)

  • [Python] 修复 WPEWebKit 的 Python 支持代码

  • 默认情况下不更改现有目录的配置偏好项 (#13477)

  • 弃用不受支持的 Firefox 配置方法 (#13477)

  • 弃用 FirefoxBinary 类 (#13476)

  • 修复 mypy 中的类型错误 (#13482)

  • 添加 Chrome 121 的 CDP 并移除 118

原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!

相关文章:

  • Python测试框架pytest介绍用法
  • 安卓面试题 11-20
  • Unity 动画(旧版-新版)
  • 【ARM 嵌入式 编译系列 10.5 -- .linkonce 段详细介绍】
  • OpenHarmony教程指南—事件的订阅和发布
  • ospf虚链路实验简述
  • vue2 elementui 封装一个动态表单复杂组件
  • Neo4J
  • 数据库_关系代数的运算
  • Oracle存储过程干货(一):存储过程基础
  • 双体系Java学习之算术运算符,赋值运算符,关系运算符
  • 20个Python函数程序实例
  • mysql的语法学习总结3(一些常见的问题)
  • C语言:判断闰年(简单)
  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
  • JavaScript-如何实现克隆(clone)函数
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • express如何解决request entity too large问题
  • java概述
  • npx命令介绍
  • php中curl和soap方式请求服务超时问题
  • SpringBoot几种定时任务的实现方式
  • Terraform入门 - 1. 安装Terraform
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 记录一下第一次使用npm
  • 利用jquery编写加法运算验证码
  • 盘点那些不知名却常用的 Git 操作
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云移动端播放器高级功能介绍
  • 进程与线程(三)——进程/线程间通信
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #pragma data_seg 共享数据区(转)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)斐波那契Fabonacci函数
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (过滤器)Filter和(监听器)listener
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)大道至简,职场上做人做事做管理
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .htaccess配置常用技巧
  • .NET Core 中的路径问题
  • .net mvc部分视图
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 材料检测系统崩溃分析
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .Net各种迷惑命名解释
  • .Net组件程序设计之线程、并发管理(一)
  • .sys文件乱码_python vscode输出乱码
  • /etc/motd and /etc/issue
  • @vue/cli脚手架
  • [1]-基于图搜索的路径规划基础
  • [1159]adb判断手机屏幕状态并点亮屏幕