[Python]Selenium-自动化测试

Selenium是一个web自动化测试的工具,在使用之前先在对应的项目添加工具包噢.

本文章主要简单的介绍了selenium对于自动化测试的使用 

目录

添加浏览器驱动

get函数来到对应网站

驱动的定位 

元素定位

id定位

class name定位

CSS定位

XPath定位

link text定位

定位一组元素

层级定位

操作测试对象

等待

强制等待

显式等待

隐式等待

鼠标点击与键盘的输入

send_keys()

click()

submit()

text

打印信息

浏览器的操作

浏览器最大化

浏览器的宽与高

浏览器的前进与后退

键盘按键

常用按键方法

键盘组合键用法

鼠标事件

alert,conirm,prompt的处理

上传文件的操作

selenium简单使用流程


添加浏览器驱动

from selenium import webdriver #导包browser = webdriver.Edge() #得到浏览器驱动

get函数来到对应网站

browser.get("https://www.baidu.com/index.htm")

驱动的定位 

通俗的说,页面通过句柄进行定位,句柄是页面的唯一标识

可以通过

driver.window_handles

来获取所有的句柄,也可以通过下面的方法获取最新页面的句柄 

driver.switch_to.window(driver.current_window_handle)  #获取当前页面的句柄,并将驱动重新定位到最新的页面

在获取后,通过switch_to.window方法重新定位浏览器驱动,这样才能进行后续的操作. 

元素定位

首先要进行导包

from selenium.webdriver.common.by import By

定位元素的方法有很多:

    • id定位(通常是唯一)
    • name定位(允许重复,定位到第一个)
    • tag name(标签名,允许重复定位到第一个)
    • class name定位()
    • CSS定位
    • XPath定位
    • link text定位

关键是"定位",当然是要定位到一个唯一的地址,当以上的id,name,class name在页面上不是唯一的时候,定位都会失败.

(可以在浏览器的开发者模式F12中,按下ctrl + f.输入要定位的元素的id或classname进行查看是否唯一)

图中显示有72个元素包含有container

id定位

通过元素的id进行定位

browser.find_element(By.ID, "kw")

name,tag name,class name都是与id定位一样的,但都是在唯一的前提下才能进行使用.

class name定位

class我们可以只截取其一部分进行定位,如果一个元素的class为hello world

那么我们可以只把hello或world放上语句进行定位

CSS定位

在F12下,找到对应的元素.右键

选择slector,得到当前元素的CSS

browser.find_element(By.CSS_SELECTOR, "#kw")

XPath定位

与CSS类似的

browser.find_element(By.XPATH, "//*[@id='kw']")

link text定位

像以上的文字链接,就可以使用这种方式(页面唯一时)

browser.find_element(By.LINK_TEXT,"hao123").click()

定位一组元素

使用find_elements

可以找到多个元素,并以集合的形式存储

saveH3 = driver.find_elements(By.CLASS_NAME, "t") # 获取所有的t 
for a in saveH3: # 遍历t中的a,获取文本并打印 data = a.find_element(By.TAG_NAME,"a").text print(data)

层级定位

在定位复杂一点的元素时,可以先定位到其父级元素,并再次定位进行寻找

driver.find_element(By.CLASS_NAME, "t").find_element(By.TAG_NAME,"a")

操作测试对象

定位完元素之后当然是要对其进行操作啦.

在webdriver中常用的操作对象有:

  • click 点击
  • send_keys 在对象上模拟按钮输入
  • clear 清楚对象输入的文本
  • submit 提交
  • text 获取元素的文本内容

等待

在selenium中,等待分为隐式等待,显示等待与强制等待

强制等待

time包中的sleep-单位为秒(s)

time.sleep(5) #页面强制等待5s

显式等待

对特定的元素进行等待

#显式等待,直到元素被加载出来.条件是10s内,每0.5秒进行尝试点击.如果元素加载出来了就停止等待
#超过10s找不到就抛异常
tmp = WebDriverWait(browser,10,0.5).until(EC.presence_of_element_located((By.LINK_TEXT,'我的世界Minecraft中国版官方网站——你想玩的,这里都有')))
tmp.click()

隐式等待

隐式等待(设置一次,全局生效)

会对所有将要被操作元素进行等待

在下一个被操作的元素没有加载出来之前会进行等待,等待的时长为20,单位为秒

driver.implicitly_wait(20)

鼠标点击与键盘的输入

send_keys()

在输入框中输入文本

click()

对元素进行点击

from selenium.webdriver.common.keys import Keys driver.find_element(By.ID, "kw").send_keys("B站") 
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)#对输入框的内容进行键盘上的Enter操作

submit()

提交表单,对type为submit类型的元素.触发表单的提交

text

获取元素的文本信息

driver.find_element(By.TAG_NAME,"a").text

打印信息

页面的title,URL...都可以获取出来

但是驱动的title和URL等属性都是当前驱动所在页面的属性,并不是浏览器上最新页面的属性

例如:

        在百度搜索结果页面,点开了一个超链接.新建了页面A

        但此时浏览器驱动还是在百度搜索结果页面上,此时直接去搜索页面A的元素是会报错的

        而通过driver.title获取页面的标题,得到的也只是百度搜索结果页面的标题,并不是A的标题

浏览器的操作

对页面的控制,

浏览器最大化

driver.maximize_window()

将页面调整至最大化

浏览器的宽与高

driver.set_window_size(#{宽},#{高})

浏览器的前进与后退

driver.forward() # 前进 driver.back # 后退

键盘按键

模拟键盘操作,首先要导入keys包

from selenium.webdriver.common.keys import Keys # 键盘按钮包

通过键盘的输入方法send_keys来进行下面的操作

常用按键方法

send_keys(Keys.TAB) # 按下tab 
send_keys(Keys.ENTER) # 按下回车 
send_keys(Keys.SPACE) # 按下空格 
send_keys(Keys.ESCAPR) # 按下回车键

键盘组合键用法

注意组合键后面的英文字母为小写

send_keys(Keys.CONTROL,'a') # 全选 
ctrl + a send_keys(Keys.CONTROL,'c') 
send_keys(Keys.CONTROL,'x') 
send_keys(Keys.CONTROL,'v')

鼠标事件

鼠标事件也要导入包

from selenium.webdriver.common.action_chains import ActionChains

ActionChains类 (执行链)中的方法有

  • context_click(#{element}) # 右键
  • double_click(#{element}) # 双击
  • drage_and_drop(#{element},#{target}) # 拖动元素至目标 target也是元素
  • move_to_element(#{element}) # 指针移动到元素

alert,conirm,prompt的处理

这是关于弹窗的处理,首先来说明一下三个弹窗

  • alert,警告类弹窗.只有确认键
  • confirm,询问类弹窗,询问是否继续某些操作.有确认与取消键
  • prompt,消息类弹窗,含有输入框,可能会要输入内容,有确认与取消键
alter = driver.switch_to.alert # 将驱动定位到当前弹窗:alert/confirm/prompt上 
alter.text # 获取当前弹窗的文本 
alter.accept() # 按下当前弹窗的确认键 
alter.dismiss() # 按下当前弹窗的取消键-如果有的话 
alter.send_keys("要输入的内容") # 在弹窗的输入框中输入内容-如果有的话

上传文件的操作

找到type为file的input标签,使用send_keys方法添加本地文件的路径

selenium简单使用流程

driver = webdriver.Edge()
driver.implicitly_wait(30)
driver.get("https://www.baidu.com/index.htm")
driver.maximize_window()  # 设置页面最大化
driver.find_element(By.ID, "kw").send_keys("蜡笔小新")
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
driver.switch_to.window(driver.current_window_handle)saveH3 = driver.find_elements(By.CLASS_NAME, "t")  # 获取所有的t
for a in saveH3:  # 遍历t中的a,获取文本并打印data = a.find_element(By.TAG_NAME, "a").textprint(data)alter = driver.switch_to.alert  # 将驱动定位到当前弹窗:alert/confirm/prompt上
alter.text  # 获取当前弹窗的文本
alter.accept()  # 按下当前弹窗的确认键
alter.dismiss()  # 按下当前弹窗的取消键-如果有的话
alter.send_keys("要输入的内容")  # 在弹窗的输入框中输入内容-如果有的话

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

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

相关文章

【Mybatis源码】XMLConfigBuilder构建器 - 读取XML配置初始化Configuration对象

XMLConfigBuilder是Mybatis中定义的进行构建Configuration对象的类,此类用于读取XML配置文件创建并初始化Configuration对象; 上一篇中我们介绍了XMLConfigBuilder构建器加载XML配置文件以及创建Configuration对象https://blog.csdn.net/m1729339749/article/details/133983…

ES6初步了解Map对象(含十种方法)

ES6提供了 Map数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 创建方法 let m new Map()console.log(m)Map的方法 1.set( ) 添加元素 接收两个参数&#xff0c…

Linux系统编程_网络编程:字节序、socket、serverclient、ftp 云盘

1. 网络编程概述(444.1) TCP/UDP对比 TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据&#xf…

Django实战项目-学习任务系统-任务管理

接着上期代码框架,开发第3个功能,任务管理,再增加一个学习任务表,用来记录发布的学习任务的标题和内容,预计完成天数,奖励积分和任务状态等信息。 第一步:编写第三个功能-任务管理 1&#xff0…

信钰证券:华为汽车概念股持续活跃 圣龙股份斩获12连板

近期,华为轿车概念股在A股商场遭到热捧,多只股票迭创前史新高。10月23日,华为轿车概念股再度走强,到收盘,板块内圣龙股份、银宝山新涨停,轿车ETF在重仓股提振下盘中一度上涨近2%。业界人士认为,…

基于SSM和VUE的留守儿童信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

基于springboot实现校园志愿者管理系统项目【项目源码+论文说明】

基于springboot实现校园志愿者管理系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,校园志愿者管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大&#xff…

Java练习题2022-1

HashSet是Java中常用的Set集合,向HashSet集合中添加数据对象时,首先会调用对象的hashCode()方法获取哈希码,根据哈希码计算对象的存储位置,如果相应位置上已经有数据对象,则会调用对象的equals()方法判断新加入的对象与…

2023软件测试高频面试题

前言 今天,我们来整理与解析一些比较高频的测试行业面试题,大家可以通过面试题内的一些解析,再结合自己的真实工作经验来进行答题思路的提取、整理。 友情提示:硬背答案虽可,但容易翻车哦。 同时,我也准备…

linux中nginx配置https

一、版本适配 版本一定要适配,否则会报错各种参数定位不到不识别的错误,以下是版本适配信息,各位观客自行按照以下信息匹配版本。 Nginx 1.11.5及以上版本与OpenSSL 1.0.2及以上版本兼容。Nginx 1.15.2及以上版本与OpenSSL 1.1.1及以上版本兼…

IDEA部署SSM项目mysql数据库MAVEN项目部署教程

如果 SSM 项目是基于 Maven 构建的,则需要配置 maven 环境,否则跳过这一步 步骤一:配置 Maven 第一步:用 IDEA 打开项目,准备配置 maven 环境 ,当然如果本地没有提前配置好 maven,就用 IDEA 默…

FindDiff_Qt找不同项目

文章目录 项目简介源代码widget.hwidget.cppwidget.ui配置文件找不同.json 项目简介 开发平台 win10Qt6.6msvc2022 简介 微信上有一些好玩的游戏, 找不同一种比较轻松有趣的游戏,也曾经在街机上被坑过N币, 玩了几次后,发现还是太难了,于是开始截屏放大,慢慢找,再然后就发展到截…

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码: 2. 数据加密示例代…

基于SSM的航班订票管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)

一、基本知识 SDRAM : 即同步动态随机存储器(Synchronous Dynamic Random Access Memory), 同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令 的发送与数据传输都是以该时钟为基准&#xff…

【Javascript】编写⼀个函数,排列任意元素个数的数字数组,按从⼩到⼤顺序输出

目录 sort方法 两个for循环 写法一: 写法二: sort方法 var list[3,6,2,8,1,7];list.sort();console.log(list);使用sort方法有局限,适合元素为个位数 var list[3,6,80,100,78,4];list.sort();console.log(list);如果元素 解决方法&#xf…

PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求

PY32F002A系列微控制器是一款高性能、低功耗的MCU,它采用32位ARM Cortex-M0内核,最高工作频率达到24MHz,提供了强大的计算能力。此外,PY32F002A拥有最大20Kbytes的flash存储器和3Kbytes的SRAM,为简单的数据处理提供了充…

asp.net教务管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 教务管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net教务管理系统 应用技术&a…

①【数据库操作】 MySQL数据库的查询、创建、删除、使用。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 目录 数据库相关概念数据库的查询、创建、删除…

数据结构绪论,基本概念

目录 1.什么是数据结构? 2.三种数据结构: 3.第一章绪论 了解概念 1.几个概念 2.数据存储方式: 3.算法的五个重要特性: 4.算法设计的要求: 1.什么是数据结构? 数据 数据,是对客观事物的符号表示,在计…