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.rhkb.cn/news/485811.html

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

相关文章

新址启新程 宜宾考拉悠然入驻宜宾市大数据产业园

12月4日,宜宾考拉悠然科技有限公司入驻宜宾市大数据产业园,此次喜迁新址,标志其在宜宾业务步入崭新阶段。 2020年,考拉悠然联合四川省人工智能研究院,结合宜宾人工智能科研、产业发展需要,共同孵化了宜宾考…

使用Redis Stream偶发空指针问题

问题描述:使用redission客户端封装的stream消息队列,在进行消息轮询时,偶发出现空指针问题。 [2024-11-13 09:59:20] [] [] [redis-stream-consumer-thread-1 ] [lambda$streamMessageListenerContainer$1] [ERROR] [c.r.c.r.s.config.Redi…

2024年11月HarmonyOS应用开发者高级认证 最新题库

新增单选 1.下述代码片段中的renderGroup属性,对性能的影响是什么:A A.劣化 B.不一定 C.没有变化 D.优化 2.在刷新Image组件内容时,如果观察到画面会闪一下白块,要怎样优化才能避免白块儿出现,同时又不会卡住画面…

大语言模型应用Text2SQL本地部署实践初探

自从两年前OpenAI公司发布ChatGPT后,大模型(Large Language Model,简称LLM)相关技术在国内外可谓百家争鸣,遍地开花,在传统数据挖掘、机器学习和深度学习的基础上,正式宣告进入快速发展的人工智能(Artificial Intellig…

Leetcode—1539. 第 k 个缺失的正整数【简单】

2024每日刷题&#xff08;206&#xff09; Leetcode—1539. 第 k 个缺失的正整数 C实现代码 class Solution { public:int findKthPositive(vector<int>& arr, int k) {int missing 1;int cur 1;int n arr.size();int missingCnt 0;int ptr 0;for(; missingCn…

PSAI海报设计新选择!StartAI Flux文生图一键生成创意海报!

设计师们&#xff0c;是时候展现你们的创意魔力了&#xff01;StartAI的Flux文生图功能&#xff0c;这款专为设计领域打造的创意工具&#xff0c;正等待着为你的圣诞节海报带来无限灵感与活力&#xff01; 想象一下&#xff0c;你的圣诞节海报不再局限于传统的元素和布局&…

Django模板系统

1.常用语法 Django模板中只需要记两种特殊符号&#xff1a; {{ }}和 {% %} {{ }}表示变量&#xff0c;在模板渲染的时候替换成值&#xff0c;{% %}表示逻辑相关的操作。 2.变量 {{ 变量名 }} 变量名由字母数字和下划线组成。 点&#xff08;.&#xff09;在模板语言中有…

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…

K8S,StatefulSet

有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题&#xff1f; 分布式应用&#xff0c;它的多个实例之间&#xff0c;往往有依赖关系&#xff0c;比如&#xff1a;主从关系、主备关系。 还有就是数据存储类应用&#xff0c;它的多个实例&#xff0c;往往都会在本地…

如何使用Java编写Jmeter函数

Jmeter 自带有各种功能丰富的函数&#xff0c;可以帮助我们进行测试&#xff0c;但有时候提供的这些函数并不能满足我们的要求&#xff0c;这时候就需要我们自己来编写一个自定义的函数了。例如我们在测试时&#xff0c;有时候需要填入当前的时间&#xff0c;虽然我们可以使用p…

单例模式的析构学习

1、例子 如果单例对象是类的static成员&#xff0c;那么在程序结束时不会调用类的析构函数&#xff0c;如下&#xff1a; #include <iostream> using namespace std;class A{ private:static A* m_ins;//声明&#xff0c;静态指针成员A(){} public:static A* getIns(){…

Python 在同一/或不同PPT文档之间复制幻灯片

复制幻灯片可以帮助我们更高效地完成工作&#xff0c;节省大量的制作时间。通过复制现有的幻灯片&#xff0c;可以快速创建新的演示文稿&#xff0c;而无需重新设计板式样式等。此外&#xff0c;复制幻灯片还可以帮助我们保持内容的一致性&#xff0c;使整个PPT演示文稿看起来更…

Fastadmin的定时任务详解

文章目录 Fastadmin的定时任务详解一、引言二、实现定时任务1、创建定时任务控制器2、配置定时任务 三、使用示例1. 编写备份脚本2. 配置定时任务3. 测试定时任务4. 监控备份结果 四、总结 Fastadmin的定时任务详解 一、引言 FastAdmin是一款基于ThinkPHP框架开发的后台管理系…

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

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

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议&#xff0c;属于应用层协议&#xff0c;在传输层使用TCP协议。HTTP协议属是无状态的&#xff0c;对事务处理没有记忆能力&#xff0c;如果需要保存状态需要引用其他技术&#xff0c;如Cookie。HTTP协议属是无连接的&…

【BUG】VMware|vmrest正在运行此虚拟机,无法配置或删除快照

VMware版本&#xff1a;VMware 16 文章目录 省流版问题解决方案 详细解释版问题解决方案总结 省流版 问题 只读&#xff0c;因为vmrest正在运行虚拟机。 解决方案 参考&#xff1a;虚拟机设置&#xff0c;只读&#xff0c;因为vmrest正在运行此虚拟机。有谁遇到过这种问题吗&…

解决Windows与Ubuntu云服务器无法通过Socket(udp)通信问题

今天在写Socket通信代码的时候&#xff0c;使用云服务器自己与自己通信没有问题&#xff0c;但是当我们把客户端换为Windows系统的时候却无法发送信息到Linux当中&#xff0c;耗时一上午终于搞定了&#x1f612;。 问题&#xff1a; 如上图&#xff0c;当我在windows的客户端…

CANoe中DBC数据库的制作和使用

在日常工作中&#xff0c;CANdb是一个与我们密切相关的重要工具。它不仅能够帮助我们高效管理CAN总线通信&#xff0c;还能简化配置过程&#xff0c;提升工作效率。通过CANdb&#xff0c;我们可以轻松定义和管理关键的通信参数&#xff0c;从而使整个项目更加顺利。或许有同学会…

【WebRTC】适合新手宝宝的WebRTC入门教学

文章目录 简述SDPNATNAT的分类完全圆锥型受限圆锥型端口受限圆锥型对称型 ICESTUNTURN总结参考链接 简述 WebRTC通过整合现有的网络协议为设备提供了实时通信的能力&#xff0c;其底层由 C 开发&#xff0c;并通过标准化的 JavaScript API 和原生接口&#xff08;如 C 和 Java…