我们非常高兴地宣布Selenium 4的发布。这适用于Java、.net、Python、Ruby和Javascript。你可以从你最喜欢的包管理器或GitHub下载它!

https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.0.0

如果您已经是一个Selenium用户,那么这个更新应该很简单,只需改变依赖从3.x切换4.0.0即可。我们一直在努力确保这是一个无痛升级,重点是保持公共API尽可能稳定。

当然,我们已经做了一些更改,所以如果您依赖于那些标记为Selenium内部的代码,或者那些已弃用的代码,那么您可能会遇到一些问题。请查看我们的文档,了解如何处理我们所知道的每个常见问题。

https://www.selenium.dev/documentation/getting_started/how_to_upgrade_to_selenium_4/

Selenium4 不仅仅是一个稳定的版本!它带来了一大堆新的和令人兴奋的特性,我们希望这些特性将使您的测试编写起来更加有趣!运行时更稳定!让我们来看看其中的一些新功能!

相对定位器

我们已经介绍了相对定位器。它们允许您使用人们也使用的语言指定在页面上可以找到元素的位置;比如在那个元素之上,或者在另一个元素的右边。这将为您提供一种工具来应对复杂定位器,使您的测试读起来更清楚一些,并更能适应页面DOM的变化。我们不是第一个想到这个主意的人——这个荣誉属于Sahi(注:Sahi一款web自动化工具)——但如果你以前没有用过,我们希望你喜欢!

from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with passwordField = driver.find_element(By.ID, "password")
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").above(passwordField))

above() 用于要查找的元素在指定元素的上方。

基于Firefox/Chromium的新功能

如果你使用的是火狐或源自于Chromium的浏览器,我们也增加了一大堆新功能。这些方法包括处理“基本”和“摘要”身份验证;网络监听(Are you an HTTP 418?);以及执行常见请求的任务,如等待DOM的更新,或提供查看Javascript错误的方法。

  • 认证
const {Builder} = require('selenium-webdriver');

(async function example() {
try {
let driver = await new Builder()
.forBrowser('chrome')
.build(); const pageCdpConnection = await driver.createCDPConnection('page');
await driver.register('username', 'password', pageCdpConnection);
await driver.get('https://the-internet.herokuapp.com/basic_auth');
await driver.quit();
}catch (e){
console.log(e)
}
}())

注:python 没有register() 方法,目前还不确定是否为bug。

  • Are you an HTTP 418?

这就是个玩笑。IETF在1998年愚人节时发布的一个笑话RFC,具体可以参考RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)超文本咖啡壶控制协议。htcpcp1.0协议中的418的意义是:当客户端给一个茶壶发送泡咖啡的请求时,茶壶就返回一个418错误状态码,表示"我是一个茶壶" 或者 "我是个杯具"。

  • 等待DOM的更新
const {Builder, until} = require('selenium-webdriver');
const assert = require("assert"); (async function example() {
try {
let driver = await new Builder()
.forBrowser('chrome')
.build(); const cdpConnection = await driver.createCDPConnection('page');
await driver.logMutationEvents(cdpConnection, event => {
assert.deepStrictEqual(event['attribute_name'], 'style');
assert.deepStrictEqual(event['current_value'], "");
assert.deepStrictEqual(event['old_value'], "display:none;");
}); await driver.get('dynamic.html');
await driver.findElement({id: 'reveal'}).click();
let revealed = driver.findElement({id: 'revealed'});
await driver.wait(until.elementIsVisible(revealed), 5000);
await driver.quit();
}catch (e){
console.log(e)
}
}())

我们以一种与现有api相适应的方式添加了这些新特性。没有必要重写您的测试:只要在您觉得合适的时候使用新特性即可。

Selenium Grid

我们还重建了Selenium Grid,借鉴了Zalenium和Selenoid等成功项目的经验,以增强其能力。这个新的Grid就像在传统的HubNode配置中一样,可以在单台机器上运行单个进程,但它也支持完全分布式模式,用于运行Kubernetes的现代基础设施。它具有更好的内置安全性,因为我们知道保护Grid可能是一项困难的任务。在所有这些规模和大小,我们添加到语言绑定的所有新特性都将按照预期工作。

Grid还可以管理本地机器上的Docker容器,拉出独立的firefox服务器之类的图像,这样您的基础设施维护就会稍微轻松一些。

最后,Grid更容易管理。我们修改了UI,将其置于GraphQL模型之上,任何人都可以自由查询并使用它来创建自己的Grid可视化或监视器。如果您想查看正在运行的会话,可以打开并与之交互的实时VNC(虚拟网络计算机)预览,从而更好地了解正在发生的事情。如果你想要更多的信息,我们已经在网格中集成了对OpenTelemetry的支持,所以现在你可以确切地知道发生了什么,在哪里,什么时候。

感谢

我知道说这是一种“非常愉快”的陈词滥调,但说实话,这是真的。开发这个新版本的Selenium是一个与一些了不起的工程师一起工作的机会,也是一个充满活力和活力的社区的一部分。与这些人一起编写这些代码非常有趣,在这里向尽可能多的人说“谢谢”感觉是正确的。所以,不用再等了。

最后

本文试着对《Announcing Selenium 4》进行了简单的翻译,本来怀着激动的心情来的,结果当我一一验证这些新特性的时候,非常糟糕!这特么就是打磨这么久出的 4.0 正式版。

  1. python(Selenium)API缺失。
  2. 官方文档的例子不完整,还有错误。

https://github.com/SeleniumHQ/seleniumhq.github.io/issues/800

selenium 4.0 发布的更多相关文章

  1. selenium 3.0发布

    记得3年前selenium core team就放出风声selenium3.0将在某个圣诞节发布,然而大家等了3年,就在所有人都不再关注selenium进度的时候,selenium3.0 beta1悄 ...

  2. Selenium 4即将发布:每个QA都应该知道的

    阅读原文 Simon Stewart(Selenium的创始成员)在班加罗尔的Selenium大会议上正式确认了Selenium4.0的发布日期和一些主要更新.我们先来提前了解一下Selenium 4 ...

  3. selenium V1.0和V2.0差别对比

    Selenium 1.0 Selenium 1.0版本,就是大家所熟知的Selenium RC,其中 RC 是 Remote Control 的缩写.Selenium RC 的工作原理是 利用 Jav ...

  4. Selenium WebDriver 2.34.0 发布,支持Firefox22

    Selenium WebDriver 2.34.0 发布,支持Firefox22http://automationqa.com/forum.php?mod=viewthread&tid=270 ...

  5. 【译】Selenium 2.0 WebDriver

    Selenium WebDriver   注意:我们正致力于完善帮助指南的每一个章节,虽然这个章节仍然存在需要完善的地方,不过我们坚信当前你看到的帮助信息是精确无误的,后续我们会提供更多的指导信息来完 ...

  6. Selenium 2.0与Selenum 3.0介绍

    什么是Selenium Selenium是一组web自动化测试工具集,它由以下几个部分构成: Selenium IDE(Integrated Development Environment)这是Fir ...

  7. Selenium 4.0 Alpha更新日志

    早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新. ...

  8. selenium 3.0 beta2 初体验

    经过漫长的等待,终于迎来了selenium 3.0 从selenium 1.0 至今,差不多有十多年的历史.这个月终于迎来了selenium3.0 那么selenium3.0 为我们带来了什么? 看一 ...

  9. Visual Studio Code 1.0发布,支持中文在内9种语言

    Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...

随机推荐

  1. go语言内存对齐

    内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址并占用合适的长度,这就是内存对齐 每种类型的对齐值就是他的内存边界 64位 类型 对齐边界 (对齐值) int8 1byte ...

  2. CPU内部结构域寄存器

    CPU内部结构域寄存器   64位和32位系统区别: 寄存器是CPU内部最基本的存储单元. CPU对外是通过总线(地址.控制.数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那 ...

  3. idea导出jar包及坑

    导出基本步骤 1.打开项目结构,在artifact新建一个jar 2.然后填写主类和依赖 3.这里的坑: 4.查看 5.点击编译输出 6.得到jar包

  4. 【SpringMVC】视图

    SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动 ...

  5. WebService学习总结(三)--调用第三方提供的webService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取电子邮箱验证和查询火车时刻表和天气预报 ...

  6. Defence

      emm...这道题我调了一下午你敢信??   好吧还是我太天真了.   开始的时候以为自己线段树动态开点与合并写错了,就调;   结果发现没问题,那就是信息维护错了.   一开始以为自己最左右的1 ...

  7. 性能测试必备命令(2)- uptime

    性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 系统启动up了(运行了)多 ...

  8. 动态路由——OSPF

    目录: 一. OSPF路由协议概述     1,OSPF协议    2,内部网关协议和外部网关协议   3,OSPF的工作过程 二.OSPF基本概念   1,OSPF区域   2,区域ID   3,R ...

  9. 升级到windows10之后的骚操作,安装debian,centos7,支持linux、docker、kubectl命令

    修改Windows10默认字体和图标很大 打开Hyper-V Windows10下载Docker Desktop https://www.docker.com/products/docker-desk ...

  10. 【JDK】分析 String str=““ 与 new String()

    一.基础概念 为了讲清楚他们的差异,这里先介绍几个概念. 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的.该常量是在编译期被确定,并被保存在已编译的.class文件中,其中包括了类,方法, ...