Airtest-Selenium升级兼容Selenium 4.0,给你全新体验!

一、前言

在上期更新推文中提到,我们Airtest-Selenium更新到了1.0.6版本,新增支持Selenium4.0的语法,那么我们来看一下Airtest-Selenium更新后有什么新的内容吧~

二、selenium 4.0有什么新功能

selenium4.0最主要的还是定位元素方法的更新,与旧版本的selenium代码写法存在一些差异,变得更简洁明了。

1. 定位单个元素方法的更新

首先我们来看一下定位元素方法的更新,AirtestIDE同时兼容新旧两种写法,将find_element_by_xpath()的方式更新为find_element(),目前使用AirtestIDE的Selenium窗口录制脚本输出的仍然为旧写法。但是我们是可以兼容运行新写法的~

更新前写法(Selenium3):

driver.find_element_by_class_name("className")
driver.find_element_by_css_selector(".className")
driver.find_element_by_id("elementId")
driver.find_element_by_link_text("linkText")
driver.find_element_by_name("elementName")
driver.find_element_by_partial_link_text("partialText")
driver.find_element_by_tag_name("elementTagName")
driver.find_element_by_xpath("xpath")

更新后写法(Selenium4):

#注意使用新写法的时候要引用selenium的By库
from selenium.webdriver.common.by import By

driver.find_element(By.CLASS_NAME,"xx")
driver.find_element(By.CSS_SELECTOR,"xx")
driver.find_element(By.ID,"xx")
driver.find_element(By.LINK_TEXT,"xx")
driver.find_element(By.NAME,"xx")
driver.find_element(By.PARTIAL_LINK_TEXT,"xx")
driver.find_element(By.TAG_NAME,"xx")
driver.find_element(By.XPATH,"xx")

2. 定位多个元素方法的更新

与上述定位元素一样,定位多个元素方法的更新将find_elements_by_xpath()的方式换成了find_elements(),下面是一些写法的变化:

更新前写法(Selenium3):

driver.find_elements_by_class_name("className")
driver.find_elements_by_css_selector(".className")
driver.find_elements_by_id("elementId")
driver.find_elements_by_link_text("linkText")
driver.find_elements_by_name("elementName")
driver.find_elements_by_partial_link_text("partialText")
driver.find_elements_by_tag_name("elementTagName")
driver.find_elements_by_xpath("xpath")

更新后写法(Selenium4):

#注意使用新写法的时候要引用selenium的By库
from selenium.webdriver.common.by import By

driver.find_elements(By.CLASS_NAME,"xx")
driver.find_elements(By.CSS_SELECTOR,"xx")
driver.find_elements(By.ID,"xx")
driver.find_elements(By.LINK_TEXT,"xx")
driver.find_elements(By.NAME,"xx")
driver.find_elements(By.PARTIAL_LINK_TEXT,"xx")
driver.find_elements(By.TAG_NAME,"xx")
driver.find_elements(By.XPATH,"xx")

3. Selenium 4新增了相对定位

selenium更新到4.0以上的版本后,新增了一个对元素相对定位的支持,他能根据某些原点元素作为参考去定位该元素附近的其他元素,目前可用的相对定位有:

  • above 元素的上方

  • below 元素的下方

  • toLeftOf 元素的左方

  • toRightOf 元素的右方

  • near 元素的附近

    #假如有九宫格button元素分别排布着1-9,如计算器排布方式
    text5 = driver.find_element(By.NAME, "5") #以数字5为原点元素的基准
    
    #在数字5的上面是数字8
    text8 = driver.find_element(locate_with(By.TAG_NAME, "button").above(text5))
    
    #在数字5的下面是数字2
    text2 = driver.find_element(locate_with(By.TAG_NAME, "button").below(text5))
    
    #在数字5的左面是数字4
    text4 = driver.find_element(locate_with(By.TAG\_NAME, "button").to_left_of(text5))
    
    #在数字5的右面是数字6
    text6 = driver.find_element(locate_with(By.TAG_NAME, "button").to_right_of(text5))
    
    #默认寻找数字5附近含有该TAG_NAME且离数字5最近的元素
    Near = driver.find_element(locate_with(By.TAG_NAME, "button").near(text5))
    
    

三、在 AirtestIDE 上跑 selenium4.0 的新方法

1. 以定位单个元素方法的更新为例

请添加图片描述

可以看到,我们这边可以混合使用两种写法的,都可以正常识别并进行正常的操作的,具体参考代码如下:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.by import By

driver = WebChrome()
driver.implicitly_wait(20)

#打开百度网站
driver.get("https://www.baidu.com")
sleep(2.0)

#在搜索框中搜索2024两会
searchbox = driver.find_element(By.ID,"kw")
searchbox.send_keys("2024两会")
searchbox.submit()

driver.switch_to_new_tab()

#点击进入其中一个直播回放画面
driver.find_element(By.XPATH,"//*[@id=\"2\"]/div/div/div/div[3]/div/div/div[4]/a/button/span").click()
driver.switch_to_new_tab()
sleep(3.0)

#识别视频的简述内容
el=driver.find_element(By.CLASS_NAME,"title-desc").text

print(el)

2. 以元素相对定位方法的更新为例

注意: 如果使用AirtestIDE原生环境跑测的同学们可能会发现出现了这个报错信息:No module named 'selenium.webdriver.support.relative_locator',这个是AirtestIDE环境下的兼容性问题,目前我们已经在排期兼容了,后续有新的兼容信息会通知大家!
在这里插入图片描述

虽然AirtestIDE的原生环境会有一定兼容性的报错,但是可以通过更换python路径为本地的python环境就可以使用新的相对定位的方法啦~(PS:前提是本地的python环境下的selenium以及Airtest-Selenium的版本皆为目前最新版本)

在这里插入图片描述

具体更换AirtestIDE的环境为本地python环境的详细方法,可以点击查看我们的教程文档:https://airtest.doc.io.netease.com/IDEdocs/3.4run_script/0_run_script/#4

下面我们利用一个小小的例子,来看一下相对定位的实现情况吧。

在这里插入图片描述

可以看到可以通过一个已知的原点元素以及目标元素的所在方位可以通过相对定位去直接寻找,在日常编写脚本的时候可以更方便快捷。

参考代码如下:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
driver = WebChrome()
driver.implicitly_wait(20)

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

#打开计算机网站
driver.get("http://www.0756jia.com/")
sleep(2.0)

#以数字5为相对定位的原点
text5 = driver.find_element(By.ID,"simple5")

#在数字5上方是数字8
text8 = driver.find_element(locate_with(By.TAG_NAME, "A").above(text5))
text8.click()

#在数字5下方是数字2
text2 = driver.find_element(locate_with(By.TAG_NAME, "A").below(text5))
text2.click()

#在数字5左方是数字4
text4 = driver.find_element(locate_with(By.TAG_NAME, "A").to_left_of(text5))
text4.click()

#在数字5右方是数字6
text6 = driver.find_element(locate_with(By.TAG_NAME, "A").to_right_of(text5))
text6.click()

#在数字5旁边是数字8
Near = driver.find_element(locate_with(By.TAG_NAME, "A").near(text5))
Near.click()

3.小结与注意事项

3.1 AirtestIDE更新了Airtest-Selenium,支持了Selenium 4.0的新定位语法

AirtestIDE更新了Airtest-Selenium到1.0.6版本,支持了Selenium4.0的新定位语法,包括了单个以及多个元素的定位语法,将find_element_by_xpath()的方式换成了find_element()

3.2 在本地python环境中,更新airtest-selenium、selenium,可以支持4.0新功能

虽然在AirtestIDE的原生环境中,暂时不支持进行该相对定位方式,但是可以在本地的python环境中,将Airtest-Selenium、Selenium4到更新到最新版本后,可使用新增的元素的相对定位方法。

在更新Airtest-Selenium的时候,别忘了将自己环境下的selenium更到4.0以上的版本

#更新airtest-selenium
pip install -U airtest-selenium

#更新selenium
pip install -U selenium

3.3 chrome与chromedriver对应问题

大家想用新版本的chrome浏览器进行自动化测试很久了,我们兼容了目前新版本的chrome浏览器,但是要注意的是要将AirtestIDE环境下以及本地环境下的chromedriver更换成与自己chrome版本对应的才可以噢!

旧版chromedriver下载地址:https://chromedriver.storage.googleapis.com/index.html

新版chromedriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/

3.4小结

目前Airtest-Selenium的1.0.6版本兼容了selenium4.0的语法,我们可以更简单快捷的完成我们想要的自动化测试效果,可以更好的联动浏览器去完成更多的内容。同时我们也欢迎大家给我们投稿你们想要实现的selenium实操例子,也非常欢迎热心同学给我们投稿自己实现的脚本例子~

如同学们在使用新版的Airtest-Selenium时遇到了一些问题无法解决,可以通过此网站向我们的开发者快速提单:https://airtest.netease.com/issue_create

可以在标题中加入“Airtest-Selenium1.0.6”之类的字眼。方便我们快速筛选和排查。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes(k8s第四部分之servers)

1,为什么不使用round-robin DNS? 因为DNS有缓存,不会清理,无法负载均衡 ipvs代理模式,这种模式,kube-proxy会监视Kubernetes Service 对象和Endpoints,调用netlink接口以相应地创建ipvs规则并…

从自媒体小白到优质KOL,你只差这些个人IP提效神器了!

在数字化浪潮的推动下,社交媒体已成为连接品牌与消费者的重要桥梁。然而,面对众多的社交平台、复杂的数据分析和日益增长的用户需求,社媒运营者常常感到力不从心。高效的社交媒体运营不仅可以提升品牌形象,还能促进产品销售&#…

【网站项目】109网上手机商城

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

VUE3内置组件Transition的学习使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码:…

地理数据 vs. 3D数据

在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…

wifi的5G和3GPP的5G

wifi 5G 跑的是802.11的协议。 wifi的5G指的就是频率,例如wifi2.4G,其频段处于2.400GHz~2.4835GHz之间,wifi5G的频率范围为5.15GHz到5.875GHz,其中包括多个频道。 这里有个误区,并不是运行在5GHz频段的WI-FI就是5G …

python单例模式应用之pymongo连接

文章目录 单例模式介绍模块简介安装简单的连接使用单例模式的连接单例类的实现配置的使用单例模式的测试 单例连接的调用 单例模式介绍 适用场景: 单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用…

面经(三)

auto类型推导 1. 基本类型推导: - auto i 42; 推导为 int,因为42是整数字面量,默认类型为int。 - auto l 42LL; 推导为 long long,因为42LL是长整型字面量,LL后缀指定类型为long long。 - auto f 3.14f; 推导为 floa…

移动端研发技术的进化历程

移动端研发技术 移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术的过去、当下和未来,一步一步介绍移动技术的进化历程。 原生开发 原生应用程序是指某一个移动平台(比如iOS或Android)所特有的应用,使…

阿里云服务器安全狗免费使用多引擎智能查杀引擎

云服务器具有按量付费、降低综合成本等诸多优势,受到很多企业的欢迎。 因此,目前使用的云服务器越来越多。 阿里云是目前云服务器中最具影响力的品牌,因此选择阿里云服务器的用户数量也是最多的。 那么阿里云服务器需要安装杀毒软件吗&#x…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像,分别计算图像的均值、方差等统计特征,并计算图像的直方图特征并以图形方式显示图像的直方图(用C或C语言实现)。 学习将会依据教材图像处理与图像分析基础(C/C)版内容展开 在上个笔记中&…

打造完美视频,两款Mac录屏软件推荐!

“mac电脑可以进行录屏吗?我正在准备一次在线演示,需要将一些操作过程记录下来,这样观众可以更加清晰地了解。我尝试过一些mac录屏软件,但是感觉有些复杂,不太适合自己。请问有没有好用的mac录屏软件推荐?”…

2024智建会凝聚科技创新成果,促进建筑低碳发展

在建设中,将一些废弃工业生产废旧料作为混凝土合理掺和料,既可 以节省水泥等装饰建材,又能增加混泥土的使用期。装配式结构和新型墙体材料、屋面防水材料彼此适配,这些材料具有重量轻、施工简单、施工周期时间短、采用肝纤维化、复…

基于SpringBoot的“企业客户信息反馈平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“企业客户信息反馈平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 平台首页界面图 技术文档界面图 问题信息…

ArcGIS全系列实战视频教程——9个单一课程组合+系列直播回放

《ArcGIS全系列实战视频教程》是由9个单一课程组合合成。组成一条ArcGIS入门实战各项专题深入应用学习全链条,让你学有方向、学有目的,系统全面掌握ArcGIS。 ArcGIS全系列实战视频教程——9个单一课程组合https://edu.csdn.net/combo/detail/2569 《Ar…

PyJWT 登录鉴权最佳实践【Refresh Token】

🎉 Json web token (JWT), 根据官网的定义,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519)。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明…

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现VMD-CN…

【MySQL】MySQL索引特性

文章目录 一、没有索引,可能会有什么问题二、认识磁盘1.MySQL与存储2.磁盘 三、MySQL与磁盘交互基本单位四、索引的理解五、索引操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引5.删除索引6.使用案例7.创建全文索引8.索引创建原则 一、没有索引&#xff…

力扣654 最大二叉树 Java版本

文章目录 题目描述解题思路代码 题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上…

十二、Transformer(Attention Mechanism)

参考Transformer详解 和 Transforner模型详解 1 Transformer 整体结构 Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。 ​ 2 Transformer 局部结构 2.1 输入层 Transformer 中的输入层是由单词的 Word Embedding 和 …