selenium常见接口函数使用

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

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

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

在这里插入图片描述

目录

1. 查找

查找方式

css_selector

xpath

2. 操作测试对象

窗口

设置窗口大小

3. 屏幕截图

4. 弹窗

5. 等待

强制等待

隐式等待

显式等待

网页导航

上传文件

 6.驱动对象参数设置

模式

加载策略


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

前提知识:

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

下面是示例代码:

import datetime

from 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" #设置加载方式

结语

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

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

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

相关文章

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示,并…

深度和法线纹理

屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理,存在以下问题&…

Vue3小兔鲜电商项目

创建项目 npm install 装包 创建文件夹 git工具管理项目 基于create-vue创建出来的项目默认没有初始化git仓库,需要我们手动初始化 执行命令并完成首次提交: git init git add . git commit -m "init"

短视频矩阵系统SEO优化排名技术的源码搭建与实施:

在开发短视频SEO优化排名技术时,虽然初步观察可能让人认为仅通过get和set这两个代理(trap)就能实现,但实际操作中远不止如此。为了更全面地控制私有属性的访问权限,还需要实现has、ownKeys以及getOwnPropertyDescripto…

Ubuntu中安装配置交叉编译工具并进行测试

01-下载获取交叉编译工具的源码 按照博文 https://blog.csdn.net/wenhao_ir/article/details/144325141的方法,把imx6ull的BSP下载好后,其中就有交叉编译工具。 当然,为了将来使用方便,我已经把它压缩并传到了百度网盘&#xff…

Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)

概述 在上一篇文章中,我们介绍了一部分简单的过滤功能,已经可以帮助我们较为准确的定位到感兴趣的请求;提升我们的工作效率,我们可以通过设置更为复杂的过滤规则,精准到定位的我们想要的请求和响应信息。专注于分析对…

错题:Linux C语言

题目&#xff1a;手写代码&#xff1a;判断一个数&#xff08;int类型的整数&#xff09;中有有多少1 题目&#xff1a;手写代码&#xff1a;判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数&#xf…

MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.0已全新发布了&#xff0c;这个版本在黑暗主题中添加自动图标反转、新增一个全新的S…

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字&#xff1b;结束一般使用stop/end关键字。基础用法包括&#xff1a; start ... stopstart ...…

【Redis】深入解析Redis缓存机制:全面掌握缓存更新、穿透、雪崩与击穿的终极指南

文章目录 一、Redis缓存机制概述1.1 Redis缓存的基本原理1.2 常见的Redis缓存应用场景 二、缓存更新机制2.1 缓存更新的策略2.2 示例代码&#xff1a;主动更新缓存 三、缓存穿透3.1 缓存穿透的原因3.2 缓解缓存穿透的方法3.3 示例代码&#xff1a;使用布隆过滤器 四、缓存雪崩4…

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent之Lares&#xff1a;Lares的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇博文介绍了 Lares&#xff0c;一个由简单的 AI 代理驱动的智能家居助手模拟器&#xff0c;它展现出令人惊讶的解决问题能力。 >> 背景痛点&#xff1a;每天都有新的…

快速集成外部业务数据:观测云如何颠覆传统监控的边界

01 传统监控的局限&#xff1a;被困在技术的“象牙塔” 过去的监控工具更多地服务于 IT 技术人员&#xff0c;就像是只为运维人员准备的“秘密花园”。服务器负载、网络延迟、系统资源——这些技术指标构成了一个封闭的世界&#xff0c;与业务层隔绝&#xff0c;就像是运维人员…

如何在Ubuntu中利用repo和git地址下载获取imx6ull的BSP

01-设置git的用户名和邮箱 git config --global user.name "suwenhao" git config --global user.email "2487872782qq.com"这里不设置的话后面在第5步的repo配置中还是会要求输入&#xff0c;而且以后进行相关操作都要输入&#xff0c;不妨现在就进行配置…

Linux-Ubuntu相关指令以及操作

一&#xff0c;Linux基础指令 二&#xff0c;文件系统结构 常用的U盘就是挂载在这个mdeia文件夹下&#xff0c;比如实现优盘分几个区&#xff0c;就要将在dev下优盘的驱动解除挂载在media,然后对其进行分区&#xff0c;再挂载回去&#xff0c;最后将其类型重新改为fat32格式&am…

二进制部署Prometheus+grafana+alertmanager+node_exporter

Prometheus 是一个开源的监控和告警工具包&#xff0c;旨在提供高可靠性和可扩展性。它最初由 SoundCloud 开发&#xff0c;现已成为云原生计算基金会&#xff08;CNCF&#xff09;的一部分。以下是 Prometheus 的一些关键特性和概念&#xff1a; 1. **时间序列数据库**&#…

使用springboot-3.4.1搭建一个netty服务并且WebSocket消息通知(适用于设备直连操作,以及回复操作)

引入最新版本 <!--websocket--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>启动类加入 //netty 协议服务端口启动 NettyTcpHandler.start()…

vulnhub靶场【hacksudo】之2

前言 靶机&#xff1a;hacksudo-2 攻击&#xff1a;kali 都是采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或者netdiscover -r 192.168.1.1/24或者nmap和masscan等可以扫描网段的扫描工具&#xff0c;不过建议使用前两个即可&#xff0c;因为靶机与攻击…

Spring Boot助力,一键解锁招聘全流程信息精细化管理

2系统相关技术 2.1 Java语言介绍 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景&#…

【设计模式系列】策略模式(二十四)

一、什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是软件设计模式中的一种行为型模式。它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互换使用&#xff0c;算法的变化不会影响使用算法的用户。策略模式让算法的变化独立于…

《Java核心技术I》映射条目的原子更新

映射条目的原子更新 ConcurrentHashMap只有部分原子更新。 JavaAPI提供了一些新方法&#xff0c;例如&#xff1a;compute方法可以提供一个键和一个计算新值的函数。 map.compute(word,(k,v)->v null ? 1 : v1) 注释&#xff1a;ConcurrentHashMap中不允许有null值。很…