selenium常见接口函数使用

   博客主页:花果山~程序猿-CSDN博客

文章分栏:测试_花果山~程序猿的博客-CSDN博客

关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!

在这里插入图片描述

目录

1. 查找

查找方式

css_selector

xpath

2. 操作测试对象

窗口

设置窗口大小

3. 屏幕截图

4. 弹窗

5. 等待

强制等待

隐式等待

显式等待

网页导航

上传文件

 6.驱动对象参数设置

模式

加载策略


嗨!收到一张超美的图,愿你每天都能顺心!

前提知识:

        自动化测试网页,我们需要浏览器的驱动程序模拟访问网页。由于单独去下一个与浏览器相同的驱动程序,非常的繁琐,所以我们直接下载驱动器版本控制器,让每次创建驱动启动时,自动下载相应版本的驱动程序。

下面是示例代码:

import datetimefrom selenium import webdriver #加载包
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time# 模拟访问 web网页
# 1. 打开浏览器
chrome_in = ChromeDriverManager().install()  #由chrome的驱动管理程序,下载合适版本驱动程序,并返回启动地址
driver = webdriver.Chrome(service=Service(chrome_in)) #以启动地址作为参数,打开一个chrome新标签页句柄
# 2. 输入百度网址
time.sleep(2)
driver.get("https://www.baidu.com")
# 3. 找到百度网址的输入框,输入“战地一”内容,通过css查找指定元素
time.sleep(2)
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("战地一")
# 4. 点击百度一下
time.sleep(2)
driver.find_element(By.CSS_SELECTOR,"#su").click()
# 5. 关闭浏览器
time.sleep(10)
driver.quit()

1. 查找

find_element(方式,“元素”)  ——单个元素

使用案例:

driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("战地一")

find_elements(方式,“元素”) ——多个元素时

使用案例:

ret = driver.find_elements(By.CSS_SELECTOR,"#hotsearch-content-wrapper > li")
for i in ret:print(i.text) #打印文本信息

查找方式

主要有css_selector,xpath

获取选择器& xpath元素: 

css_selector

功能:选择页面指定元素, 通过元素 id来识别,格式:“#.....”

driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("战地一")

xpath

功能:在所在html文件中查找指定节点

格式://*...   

(注://*是选择该html中全部元素)

例子:

虽然可以copy获取元素,但未来可能存在需要手动修改xpath的时候

较为复杂的xpath:

2. 操作测试对象

获取到元素对象后,我们可以对对象进行点击,提交,输入,清除,获取文本等操作。

cleak()——鼠标点击

功能:本质就是模拟鼠标点击

send_keys(“内容”)——输入文本

功能:用于文本框中输入信息

ret = driver.find_element(By.CSS_SELECTOR,"#kw")
ret.send_keys("战地一")

text——获取文本

get_attribute("属性名称") ——获取属性值

区别于text,get_attribute获取属性值,前者获取其中的文本。

title &  current_url

功能:获取当前页面标题,url。适用于点击跳转后,对跳转页面进行检测是否正确。 

text = driver.find_element(By.CSS_SELECTOR,
"#hotsearch-content-wrapper > li:nth-child(9) > a > span.title-content-title").text
print(text)
#get_attribute
ret = driver.find_element(By.CSS_SELECTOR,"#su").get_attribute("value")
print(ret)
title = driver.title
print(title)
url = driver.current_url
print(url)

窗口

当我们打开浏览器时,会有一个新标签页,又成标签句柄。当我们跳转一个新标签时,我们需要一个新的标签句柄来表示。那怎么获取?

  • current_window_handle——获取当前标签句柄
  • window_handles——获取所有标签句柄,一般会通过遍历,找到新的标签
  • switch_to.window(句柄变量)——切换新标签
  • close——关闭当前标签页,句柄变量需重定义

使用案例:

# 测试窗口
driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(6)").click()
current_ptr = driver.current_window_handle
all_ptr = driver.window_handles
for i in all_ptr:if i != current_ptr:# 切换标签driver.switch_to.window(i)print(driver.title)
print(driver.current_url)

这种多标签页操作不怎么常见,一般情况下:存在2个标签页,进行标签切换测试;更多时候直接在当前标签页,进行get,直接访问网页。

不切换标签页测试

# 不变化标签下,切换网页
text = driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(6)").get_attribute("href")
driver.get(text) #获取url,在标签页直接输入
#当然有一些不需要切换标签页的.cleck,driver也不需要更换

设置窗口大小

3. 屏幕截图

适用常见:自动化测试时,仅终端的问题反馈十分有限,屏幕截图可以很有效的定位错误点,方便debug。

save_screenshot("路径") ————截取到图片存储路径

用例:

#截图
driver.save_screenshot("./images/imagetext.png") # 相同名,会覆盖
text = driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(6)").get_attribute("href")
driver.get(text) #获取url,在标签页直接输入
datatime = datetime.datetime.now().strftime("./images/image%Y-%m-%d-%H%M%S" + ".png")
driver.save_screenshot(datatime)

4. 弹窗

弹窗在页面上是找不到元素的,那么我们怎么通过selenium进行处理?alert接口

特点:

  1. 页面没有元素定位弹窗。
  2. 打开弹窗后,无法定位页面元素。

弹窗出现情况:

1.警告弹窗:只有确认键

2.确认窗口:有确认,取消键

3.提示窗口:有文本框,确认,取消键

案例:

#特殊弹窗
alert = driver.switch_to.alert
alert.accept() #点击确认按钮
alert.dismiss() #点击取消按钮
alert.send_keys("zzz") #向文本框输入信息

5. 等待

适用场景,由于程序脚本速度过快,网页渲染过慢,导致程序找不到元素,从而发生误判。

selenium等待三种方法:强制等待(sleep()),隐式等待(implicitly_wait()),显示等待

强制等待

也就是我们经常使用的sleep,无论网页是否已经渲染完毕,程序都得阻塞n秒。 

特点:

1. 代码简答,调试方便。

2. 效率过低,浪费大量时间。

隐式等待

特点:

1.一旦被设置,就是全局等待属性,凡事查找元素操作,采用轮询查找,超时报错

2. 生命周期:同驱动程序周期一样,driver.quit才销毁。

3. 效率较高

4.检测不到弹窗

案例:

# sleep()强制等待
# 隐式等待,特点:一旦设置,即属于全局,所有查找遵循该隐式等待;遇到查找元素时,轮询查找,超时报错;
wait = driver.implicitly_wait(3) #最多等待3秒
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("战地一简介")
driver.find_element(By.CSS_SELECTOR, "#su").click()
# 小细节:转义字符,我们需要手动处理
ret = driver.find_element(By.CSS_SELECTOR, "#\\32  > div > div._content-border_zc167_4")
ret.click()

显式等待

        也是一种智能等待,只要在特定时间内,满足操作条件则继续执行后续代码。

特定:

1.灵活度高

2.代码比较复杂

3.可以检测弹窗条件

案例:

# 显示等待# 创建等待类对象
display_wait = WebDriverWait(driver, 3)
# 开始查找
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("战地一简介")
driver.find_element(By.CSS_SELECTOR, "#su").click()
#设置等待条件,有兴趣的同学,可以查找相关的条件函数使用
display_wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#\\32  > div > div._content-border_zc167_")))

网页导航

在当前标签页,进行网页的前进,后退,刷新。

driver.forward()
driver.back()
driver.refresh()

上传文件

 面对点击,输入上传文件时,我们可以直接通过send_keys(“文件路径”),上传文件。

 6.驱动对象参数设置

模式

举例:"有头模式" "无头模式"——> 也就是前台,后台模式

chrome_in = ChromeDriverManager().install()
# 创建默认参数对象
options = webdriver.ChromeOptions()
# 设置后台模式(无头模式)默认前台模式
options.add_argument("-headless")driver = webdriver.Chrome(service=Service(chrome_in), options=options)
driver.get("https://www.baidu.com")
print(driver.title)

加载策略

    标签对象通过调用get访问网址,网页服务器会响应资源,get会根据加载策略等待所需资源加载完毕后,才会执行后续代码 。 

目前有三种加载策略:

  • normal : 默认值,全加载主题,如框架,图片,视频模式
  • eager :  DOM就绪,但图片等其他视频还未加载成功。
  • none :   不会阻塞webdriver

设置加载策略:

options.page_load_strategy = "eager" #设置加载方式

结语

   本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。

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

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

相关文章

3-5 C常用的字符串库函数

1.0 字符串库函数 strlen()函数用于返回字符串的长度,不包括结尾\0 uint32_t strlen(char *str) {uint32_t len 0;while (str[len] ! \0){len;}return len; } 编译器在处理字符串时,会自动的在数据末尾添加ASCI码“0对应十进制0,便于程序对…

weblogic开启https

JSK证书生成 生成密钥库和证书 使用Java的keytool命令来生成一个Java密钥库(Keystore)和证书。keytool是Java开发工具包(JDK)中用于管理密钥库和证书的命令行工具。 #创建证书存放目录 [weblogicosb1 jksHL]$ mkdir -p /home/w…

11.14【JAVA EXP3】【DEBUG】

比较疑惑的一点是当前页面(资源的url)与请求的url? 请求的url由webService接收,servelt当中也可以发送出这个url 进行页面跳转,是跳转到某个Jsp页面,这个页面的url是在哪里定义的? 在Jsp打印信息,这个报…

陈若尧新歌《一来二去》陆续登陆全球音乐平台

由青年演员,歌手陈若尧带来的全新创作单曲《一来二去》由索尼音乐发行,于2024年11月18日陆续全球上线。这也是陈若尧与索尼音乐合作的第一首单曲。探索古典风格与流行音乐的新结合。歌曲上线不久,就因优美抒情的动人旋律,诗意而意味深远的歌词…

Jenkins凭据管理及使用详解

简介:Jenkins凭据管理是指对Jenkins中存储的敏感信息进行管理的功能,这些信息通常用于认证和授权,以确保Jenkins能够安全地与其他系统和服务进行交互。以下是关于Jenkins凭据管理添加及作用的详细介绍: 一、Jenkins凭据管理的添加 进入凭据管理页面: 登录Jenkins后,点击…

YOLOv10改进,YOLOv10添加CARAFE轻量级通用上采样算子,可提高目标检测性能

摘要 CARAFE模块的设计目的是在不增加计算复杂度的情况下,提升特征图的质量,特别是在视频超分辨率任务中,提升图像质量和细节。CARAFE结合了上下文感知机制和聚合特征的能力,通过动态的上下文注意力机制来提升细节恢复的效果。 理论介绍 传统的卷积操作通常依赖于局部区域…

Hbase整合Mapreduce案例2 hbase数据下载至hdfs中——wordcount

目录 整合结构准备数据下载pom.xmlMain.javaReduce.javaMap.java操作 总结 整合结构 和案例1的结构差不多,Hbase移动到开头,后面跟随MR程序。 因此对于输入的K1 V1会进行一定的修改 准备 在HBASE中创建表,并写入数据 create "wunaii…

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点: 软硬件结合:系统由两台服务器(主机和备机)、一个共享存储(通常为磁盘阵列柜)、以及双机热备软件(提供心跳检测、故障转移和资源管理功能的核心软件)组成。 …

elasticSearch(一):elasticSearch介绍

一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答,用户查了半天也得不到自己想要的,好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…

开发中使用UML的流程_08 PIM-4:定义操作及方法

目录 1、序列图概述 2、序列图调用方式 3、创建消息与销毁消息 4、几项建议 1、序列图概述 在PIM-4中,系统分析员可以用序列图来表达,系统内部一群对象合力完成某一个系统用例时,执行期间的交互情形。之后,序列图可能通过设计…

关于线扫相机的使用和注意事项

引言 线扫相机作为工业视觉系统中的核心设备之一,以其高分辨率和高速成像的特点被广泛应用于印刷质量检测、电子元件检测、纺织品缺陷检测等领域。本文从线扫相机的基本原理出发,探讨其使用方法,并总结在实际应用中的注意事项,为…

UE5 像素流进行内网https证书创建

确定证书需求 内网 HTTPS 通信通常需要以下内容: 自签名证书(适用于内网环境,不需要通过公开的证书颁发机构 CA) 或者通过内部的企业 CA 签发的证书(更安全)。 生成自签名证书 使用工具(如 Ope…

QNX的IPC通信

资料参考: QNX官网文档 QNX内核名义上提供了四种服务:进程调度、IPC通信、底层网络通信、中断处理,而提供给进程的IPC通信种类有三种:Message、Pulse和Signal Message QNX最基本也是最核心的IPC方式,通常用于C/S架构的软件模式,是一对多的关系 添加图片注释,不超过 …

Python酷库之旅-第三方库Pandas(259)

目录 一、用法精讲 1226、pandas.tseries.offsets.Week.name属性 1226-1、语法 1226-2、参数 1226-3、功能 1226-4、返回值 1226-5、说明 1226-6、用法 1226-6-1、数据准备 1226-6-2、代码示例 1226-6-3、结果输出 1227、pandas.tseries.offsets.Week.rule_code属性…

Kubernetes架构原则和对象设计

云原生学习路线导航页(持续更新中) 快捷链接 Kubernetes常见问题解答 本文从 Google Borg系统的架构设计开始,深入讲解Kubernetes架构及组件的基本原理 1.什么是云计算 1.1.传统行业应用 假设有10台服务器,两个应用。小规模管…

组件中的回调方法

文章目录 1. 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍Widget的生命周期.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 本章回中介绍的生命周期是指Widget从创建到结果的整个过程,这里提到的Widget是一个…

w~深度学习~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663254 #Motion Plan 代码 github.com/liangwq/robot_motion_planing 轨迹约束中的软硬约束 前面的几篇文章已经介绍了,轨迹约束的本质就是在做带约束的轨迹拟合。输入就是waypoint点list,约束…

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业,历经数千年的演变,如今仍面临着诸多困境,在纺织行业中,每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业,喷水织机作为关键生产设备,其性能直接影响到产品质量和产能。…

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分

目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…