Selenium4自动化测试常用函数总结,各种场景操作实战
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快
seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数,下面列举下比较常用的函数,更多可见官方文档:
Selenium Documentation — Selenium 4.21.0 documentation
定位元素
find_element_by_class_name:根据class定位
find_element_by_css_selector:根据css定位
find_element_by_id:根据id定位
find_element_by_link_text:根据链接的文本来定位
find_element_by_name:根据节点名定位
find_element_by_partial_link_text:根据链接的文本来定位,只要包含在整个文本中即可
find_element_by_tag_name:通过tag定位
find_element_by_xpath:使用Xpath进行定位
PS:把element改为elements会定位所有符合条件的元素,返回一个List,比如:find_elements_by_class_name。
鼠标动作
有时需要在页面上模拟鼠标操作,比如:单击、双击、右键、按住、拖拽等。
需要导入ActionChains类:
selenium.webdriver.common.action_chains.ActionChains。
使用ActionChains(driver).XXX调用对应节点的行为。
click(element):单击某个节点;
click_and_hold(element):单击某个节点并按住不放;
context_click(element):右键单击某个节点;
double_click(element):双击某个节点;
drag_and_drop(source,target):按住某个节点拖拽到另一个节点;
drag_and_drop_by_offset(source, xoffset, yoffset):按住节点按偏移拖拽key_down:按下特殊键,只能用(Control, Alt and Shift),比如Ctrl+CActionChains(driver).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform();
key_up:释放特殊键;
move_by_offset(xoffset, yoffset):按偏移移动鼠标;
move_to_element(element):鼠标移动到某个节点的位置;
move_to_element_with_offset(element, xoffset, yoffset):鼠标移到某个节点并偏移;
pause(second):暂停所有的输入多少秒;
perform():执行操作,可以设置多个操作,调用perform()才会执行;
release():释放鼠标按钮
reset_actions:重置操作
send_keys(keys_to_send):模拟按键,比如输入框节点.send_keys(Keys.CONTROL,’a’)全选输入框内容,输入框节点.send_keys(Keys.CONTROL,’x’)剪切,模拟回退:节点.send_keys(keys.RETURN);
或者直接设置输入框内容:输入框节点.send_keys(‘xxx’);
send_keys_to_element(element, *keys_to_send):和send_keys类似;
弹窗
对应类:selenium.webdriver.common.alert.Alert。
如果触发了某个时间,弹出了对话框,可以调用下述方法获得对话框:alert = driver.switch_to_alert(),然后可以调用下述方法:
accept():确定
dismiss():关闭对话框
send_keys():传入值
text():获得对话框文本
页面前进/后退/切换
driver.switch_to_window(driver.window_handles[1])#切换窗口
driver.forward() #前进
driver.back() # 后退#打印当前url
print(driver.current_url)
页面截图
driver.save_screenshot(“截图.png”)
设置代理
# 设置代理
from selenium import webdriveroptions.add_argument("--proxy-server=http://xxxxxxx")
driver_path = r'D:/chromedriver/chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path,options=options)
driver.get("http://xxxxxx")
页面等待
现在的网页越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是如果脚本代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。
为了避免这种元素定位困难而且会提高产生ElementNotVisibleException的概率。所以Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。
1、显式等待
显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。
from selenium import webdriver
from selenium.webdriver.common.by import By#WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait#expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS()
driver.get("http://www.xxxxx.com/loading")try:# 每隔10秒查找页面元素 id="myDynamicElement",直到出现则返回element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))finally:driver.quit()
如果不写参数,程序默认会0.5s调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。
下面是一些内置的等待条件,可以直接调用这些条件,而不用自己写某些等待条件了。
title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
2、隐式等待
隐式等待比较简单,就是简单地设置一个等待时间,单位为秒。
from selenium import webdriverdriver = webdriver.PhantomJS()
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
当然如果不设置,默认等待时间为0。
执行JS语句
driver.execute_script(js语句)#比如滚动到底部:
js = document.body.scrollTop=10000
driver.execute_script(js)
补充
# 找到“嵌套”的iframe
iframe = driver.find_element_by_xpath('//iframe')# 切换到iframe
driver.switch_to.frame(iframe) # 切换到iframe
获取元素标签的内容(文本信息):
get_attribute(‘textContent’)
获取元素内的全部HTML:
get_attribute(‘innerHTML’)
获取包含选中元素的HTML:
get_attribute(‘outerHTML’)
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关文章:
Selenium4自动化测试常用函数总结,各种场景操作实战
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数,下面列举下比较常用的函数,更多可见官方文档:…...
图像生成新范式:智源推出全能视觉生成模型 OmniGen
大型语言模型(LLM)的出现统一了语言生成任务,并彻底改变了人机交互。然而,在图像生成领域,能够在单一框架内处理各种任务的统一模型在很大程度上仍未得到探索。近日,智源推出了新的扩散模型架构 OmniGen&am…...
实现RPC接口的demo记录
1.Thrift RPC 接口实现 Demo Service public class DemoServiceImpl implements DemoService.Iface {private static final Logger logger LoggerFactory.getLogger(DemoServiceImpl.class);Overridepublic String sayHello(Context context, String msg) throws TException …...
Python期末题目 | 期末练习题【概念题+代码】
一、前言 Python 是一门功能强大且易于学习的编程语言,在高校中被广泛用作教学语言。Python 的期末考试通常会包含基础知识和编程实践,以考察学生的理解与应用能力。本文整理了一套 Python 期末练习题,包括选择题、填空题、判断题和代码题。…...
OpenCV基本操作(python开发)——(6)视频基本处理
OpenCV——视频基本处理 一、读取摄像头 import numpy as np import cv2cap cv2.VideoCapture(0) # 实例化VideoCapture对象, 0表示第一个摄像头 while cap.isOpened():ret, frame cap.read() # 捕获帧cv2.imshow("frame", frame)c cv2.waitKey(1) # 等待1毫…...
详解Java之Spring MVC篇一
目录 Spring MVC 官方介绍 MVC RequestMapping 传递参数 无参数 单个参数 针对String类型 针对Integer类型 针对int类型 针对自定义类型 多个参数 参数重命名 参数强制一致 参数不强制一致 传递数组 编辑传递List 编辑 传递JSON 编辑 从路径中获取参…...
ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库
安装nvm 首先安装必要的工具: apt update apt install curl下载并执行nvm安装脚本: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash添加环境变量(如果安装脚本没有自动添加)。编辑 ~/.bash…...
Python实现办公自动化的数据可视化与报表生成
在 Python 中,可以利用多个库来实现办公自动化中的数据可视化与报表生成。以下是具体的方法: 一、数据可视化 使用 matplotlib 库 matplotlib 是一个强大的 Python 绘图库,可以创建各种类型的静态、动态和交互式图表。示例代码:i…...
前端知识串联笔记(更新中...)
1.MVVM MVVM 是指 Model - View - ViewModel,Model 是数据与业务逻辑,View 是视图,ViewModel 用于连接 View 和 Model Model ---> View:将数据转化成所看到的页面,实现的方式:Data Bindings -- 数据绑定…...
PostgreSQL根据字符串的长度排序
PostgreSQL根据字符串的长度排序 在 PostgreSQL 中,你可以使用 LENGTH 函数来获取字符串的长度,并根据这个长度进行排序。LENGTH 函数会返回字符串的字符数。 以下是一个基本的 SQL 查询示例,它根据 some_column 字符串列的长度对表中的行进…...
计算机网络:网络层 —— IP数据报的发送和转发过程
文章目录 IP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报示例 IP数据报的发送和转发过程 IP 数据报的发送和转发过程包含以下两个过程: 主机发送IP数据报路由器转发IP数据报 直接交付:源主机与目的主机在同一网络中间接交付:…...
【算力基础】GPU算力计算和其他相关基础(TFLOPS/TOPS/FP32/INT8...)
文章目录 :one: 算力的常见指标:two: 算力计算:three: 常用链接 🚀 本文主要是聚焦于深度学习领域的 GPU的算力估计,其他类型的硬件设备如CPU可以类比参考。 1️⃣ 算力的常见指标 算力衡量主要与运算速度和精度这两个指标有关。 🌔速度指…...
UI自动化测试(app端)4.0
✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…...
C#与C++交互开发系列(十):数组传递的几种形式
前言 在C#和C的交互开发中,数组传递是一个非常常见且实用的场景。数组可以作为方法的参数,也可以作为响应结果返回。在本篇博客中,我们将探讨几种常见的数组传递方式,展示如何在C#与C之间进行有效的数据交换。我们将主要介绍以下…...
【C++复习】第一弹-基础性语法
前言 学习了C语法这么久了,我其实觉得,我们学习一门语言应该更加注重使用性,对于语法的细节可以通过具体的项目去重新造轮子的时候再去抠细节,也就是说你得学会先走,在去想我们如何走的,身体的哪些肌肉在发…...
软考高级备考记录
一 报考条件和报名流程 报考条件 该考试具有水平考试性质,报考任何级别不需要学历、资历条件,只要达到相应的专业技术水平就可以报考相应的级别 报名流程 软考报名官网:中国计算机技术职业资格网 官网上有 报名时间,考试…...
图为大模型一体机新探索,赋能智能家居行业
在21世纪的今天,科技的飞速进步正以前所未有的速度重塑着我们的生活方式。从智能手机到物联网,从大数据到人工智能,每一项技术创新都在为人类带来前所未有的便利与效率。其中,图为AI大模型一体机作为人工智能领域的最新成果&#…...
精氨酸/赖氨酸多肽(芋螺肽)
产品简介: 芋螺肽,源自瑞士尖端科技,是一种模拟芋螺毒素的生物活性肽。它以其独特的分子结构和高选择性作用于电压门控钠离子通道(特别是Nav1.4),为您提供安全、自然且不僵硬的回春效果。芋螺肽࿰…...
C++音视频04:音视频编码、生成图片
视频编码 #include <libavutil/log.h> #include <libavutil/opt.h> #include <libavcodec/avcodec.h>static int encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *out) {int ret -1;ret avcodec_send_frame(ctx, frame);if (ret < …...
ImageSharp报错
错误信息 System.MissingMethodException: Method not found: System.Span1<SixLabors.ImageSharp.PixelFormats.Rgba32> SixLabors.ImageSharp.Memory.Buffer2D1.GetRowSpan(Int32).需要升级项目 原来仅升级了SixLabors.ImageSharp没有升级drawing,都升级到…...
5个专业级技巧:如何通过游戏外设调校实现射击精准控制
5个专业级技巧:如何通过游戏外设调校实现射击精准控制 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在竞技射击游戏中,…...
RVC镜像免配置部署:CSDN GPU云平台7865端口直连教程
RVC镜像免配置部署:CSDN GPU云平台7865端口直连教程 1. 引言:3分钟开启你的AI翻唱之旅 想用自己的声音唱出周杰伦的歌,或者让朋友的声音变成电影角色的配音吗?今天要介绍的RVC(Retrieval-based-Voice-Conversion&…...
Docker-镜像-命令清单
1. docker images 功能 查看所有镜像 语法 docker images [option] [repository[:tag]]常见参数 --a :列出所有镜像,包括中间层镜像(默认不显示中间层)--digests:限制镜像的 摘要信息-q: 只显示镜像ID--no-trunc:显示完整镜像信息,…...
Linux系统密码破解
环境准备: 虚拟机:VMware Workstation 17,系统:Red Hat,配置:16GB内存/8核处理器。通过登录界面修改root密码(已知旧密码): 1. 在登录界面点击“未列出”或“其他” 2. 输…...
LLM Agent方法论与实践:从构建到进化的全流程解析
1. LLM Agent基础概念与核心组件 第一次接触LLM Agent这个概念时,我把它想象成一个数字版的"全能助理"。就像你团队里那位既懂技术又擅长协调的同事,它不仅能理解你的需求,还能自主规划、执行任务,甚至从经验中学习成长…...
【心电信号ECG】基于小波变换与自适应滤波的心音信号降噪与重构【含Matlab源码】
1. 心音信号处理的核心挑战 心音信号作为人体重要的生理指标,在心血管疾病诊断中扮演着关键角色。但实际采集过程中,信号质量常常受到多种干扰:仪器本身的电子噪声、人体肌肉活动产生的肌电干扰、呼吸运动导致的基线漂移,以及环境…...
基差贸易全流程详解:高效点价与自动化下单的最佳实践
引言:破解基差贸易的高效难题——从人工瓶颈到自动化革新 基差贸易,作为现代大宗商品交易中的核心定价模式,彻底改变了企业锁定采购/销售价格的方式。无论是农产品、金属、能源还是化工,基差贸易都成为贸易公司与生产企业应对价格…...
Oxyde ORM:以 Rust 为核的类型安全异步 ORM 新势力
【导语:Oxyde ORM 作为一款以 Pydantic 为中心的类型安全异步 ORM,核心采用高性能 Rust 编写。它受 Django ORM 启发,注重明确性,为开发者带来现代、友好的工作流程。】Oxyde ORM:Rust 内核的高性能 ORMOxyde ORM 核心…...
多维复高斯分布PDF表达式、协方差矩阵意义探究
背景学习《空间信息论》时,对于高斯白噪情况下,雷达接收信号在已知距离和散射特性条件下,似然概率往往取决于噪声的PDF,即时间采样点为N的接收信号符合N维复高斯分布。欲推导的表达式,首先要使用N维复高斯分布的PDF表达…...
lingbot-depth-pretrain-vitl-14开源可部署优势:无需GPU驱动重装,兼容主流云平台
lingbot-depth-pretrain-vitl-14开源可部署优势:无需GPU驱动重装,兼容主流云平台 想快速体验一个强大的深度估计模型,但被复杂的GPU环境配置、驱动版本冲突搞得头大?如果你也有过这种烦恼,那么今天介绍的lingbot-dept…...
