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 Bydriver.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 Bydriver.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 Bydriver = 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").textprint(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”之类的字眼。方便我们快速筛选和排查。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leet code 746 使用最小花费爬楼梯

解体思路:动态规划 首先理解题意:什么是到达楼顶,这楼顶是指数组cost最后一个元素的下一个位置 所以需要创建一个元素个数为cost.size()1的dp数组 然后记录到达每一个位置的最小花费 下标0 和 1位置是起点 到达 i 位置的最小花费这个i需要…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

摘要:开发高效的零售柜商品识别系统对于智能零售领域的进步至关重要。本文深入介绍了如何运用深度学习技术开发此类系统,并分享了全套实现代码。系统采用了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5进行了性能比较,呈现了诸如…

Java中的 “==” 与 equals 的区别

Java中的 “” 与 equals 的区别 1.“” 在Java中有两大类数据类型,一类是基础数据类型共有八种分别是byte、 short、 int、 long、 float、 double、 char、boolean,另一类则是引用数据类型,例如String、Integer等等。 “ ” 作为比较运算…

SAE自动驾驶分级介绍

SAE International 国际自动机工程师学会(原译:美国汽车工程师学会)英文全程为:Society of Automotive Engineers International,是一个全球性的非常活跃且专业的标准研究组织。对于各类工程领域均有涉及,且…

Python实现BOA蝴蝶优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

钡铼技术R40路由器隧道通风控制及环境监测系统集成方案

一、背景介绍 随着城市化进程的加快,地下交通建设越来越重要。地下隧道作为城市交通的重要组成部分,其安全运行和环境质量直接关系到人们的出行体验和生活质量。为了保障隧道内空气的流通和质量,钡铼技术R40路由器通风控制及环境监测系统应运…

phpcms上传导致getshell详解及案例

一、环境 这里我根据大佬的文章将环境复原 phpcms上传导致getshell详解及案例 | 离别歌 回忆phpcms头像上传漏洞以及后续影响 | 离别歌 二、代码&#xff1a; php&#xff1a; <?php header("Content-Type:text/html; charsetutf-8"); require_once(pclzip…

ChatGPT 插件Plugin集合

ChatGPT的插件功能推出一段时间了&#xff0c;陆陆续续的上架了得有200了。 但是其中大部分都不是很好用&#xff0c;并且找起来也复杂。 推荐一个不知名热心人做的导航页。 ChatGPT Plugins Overview 基本上集合了所有的插件&#xff0c;并且还在实时更新中。 需要升级4.0&a…

React低代码平台实战:构建高效、灵活的应用新范式

文章目录 每日一句正能量前言一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践后记好书推荐编辑推荐内容简介作者简介目录前言为什么要写这本书 读者对象如何阅读本书 赠书活动 每日一句正能量 人生之美&#xff0c;不在争…

疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 ​编辑 学生功能模块 管理员功能 教师功能模块 系统功能设计 数据库E-R图设计 lun…

探索非监督学习:解决聚类问题

目录 1 非监督学习的概念1.1 非监督学习的定义1.2 非监督学习的重要性 2 聚类问题的定义和意义2.1 聚类问题的定义2.2 聚类问题的意义2.3 聚类问题在非监督学习中的地位 3 聚类算法介绍3.1 K均值聚类3.2 层次聚类3.3 密度聚类 4 聚类问题的评估4.1 内部评估指标4.2 外部评估指标…

后端程序员入门react笔记(八)-redux的使用和项目搭建

一个更好用的文档 添加链接描述 箭头函数的简化 //简化前 function countIncreAction(data) {return {type:"INCREMENT",data} } //简化后 const countIncreAction data>({type:"INCREMENT",data })react UI组件库相关资料 组件库连接和推荐 antd组…