web自动化测试selenium的基本使用

news2024/11/25 20:46:42

目录

初始化浏览器并打开网页

定位网页元素

定位的方法

模拟键盘操作 

模拟鼠标操作

 xpath方法

xpath结点

路径表达式


selenium是一个很流行的自动化测试的库,主要用于模拟浏览器的运行,是web应用测试的工具。

在使用selenium时,需要具备以下软件:

python3,pycharm(可有可无),浏览器驱动(取决于你要模拟哪个浏览器),selenium库

具体如何安装及配置,这不是我要写的重点,网上有很多全面且详细的教程,可以参考

具备以上这些条件以后,我们打开pycharm,New一个新项目,在.venu文件夹下创建一个文件test.py

首先导入selenium库

from selenium import  webdriver

注:可能有一部分用户安装好selenium库后,导入后运行时,会出现selenium库无法找到的情况,这个时候,依次点击File->Settings->Project:*->python interpreter,点击右上角的Add interpreter,进去后选择system interpreter,选择New,Location选择你安装的的python.exe的位置,点击OK即可

初始化浏览器并打开网页

此时我们可以创建初始化浏览器了,我这里以Edge浏览器为例

driver = webdriver.Edge();

此时我们运行代码,为了方便,我加了5秒的停留,不然刚运行就结束了

运行后,自动帮我打开了网页,也可以看到提示edge正由自动测试软件控制 

我们如果想访问某个网址,此时需要向网址发送请求,请求方法有很多,我们这里使用get进行请求百度官网

driver.get("http://baidu.com")

运行后,它会自动帮我打开百度网页,注意,webdriver会等待页面完全加载,才会把控制权交给测试或脚本

定位网页元素

那我们想在百度搜索框中搜索想要的内容,该如何做呢?

这时候需要进行定位了,我们首先需要定位到搜索框,然后向搜索框中发送消息,输入好后,点击发送。这是流程

既然需要定位,那我们必须要知道,我们目标位置的属性,比如搜索框,我们需要知道它的id,class或name才可以进行定位,而这些需要我们按f12打开开发者工具进行查找

找到以后我们发现,搜索框的id是kw,因此我们可以根据id进行定位,当然也可以根据类或其他的进行定位,这里有一些方法:

定位的方法

既然使用id定位,那我们直接使用第一行的函数:

属性函数
IDfind_element(By.ID,"")
CLASSfind_element(By.CLASS,"")
CSSfind_element(By.CSS,"")
XPATHfind_element(By.XPATH,"")
LINK_TEXTfind_element(By.LINK_TEXT,"")
PARTIAL_LINK_TEXTfind_element(By.PARTIAL_LINK_TEXT,"")
TAGfind_element(By.TAG,"")
#需要导入
from selenium.webdriver.common.by import By

input = driver.find_element(By.ID,"kw")

或者通过class定位也可以

input = driver.find_element(By.CLASS,"s_ipt")

模拟键盘操作 

然后定位好以后,我们需要模拟键盘向搜索框input中写入数据,假设我想搜索“python”

这里我们需要使用send_keys进行发送:

input.send_keys("python")

此时我们只是输入了,但并没有搜索,所以我们可以模拟键盘输入回车键

//需要导入包
from selenium.webdriver.common.keys import Keys

input.send_keys(Keys.RETURN)

同样键盘可以其他快捷键,如下:

 这样便成功控制浏览器自动打开百度,并搜索Python了

模拟鼠标操作

同样的,对于搜索这一步,我们也可以使用模拟鼠标的方式来进行。先定位到搜索按钮,然后再使用click 方法进行点击,效果是一样的

driver.find_element(By.ID,"su").click()

对于网页元素的操作,可以有如下几种:

 

但是selenium为我们提供了一个强大的类ActionChains,它允许用户以编程方式执行复杂的鼠标和键盘操作

from selenium.webdriver.common.keys import Keys

#perform() 方法是必须的。它的作用是执行之前链式操作中定义的所有动作。
#click这些事件只有在执行到perform时才会被执行

search = driver.find_element(By.ID,"su")
ActionChains(driver).click(search).perform()

除了单击操作,还有下面的操作

至此我们已经完成了一个打开百度,并搜索python的自动化代码了

代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains


#初始化浏览器
driver = webdriver.Edge()

#get请求访问百度网址
driver.get("http://baidu.com")

#定位搜索框
input = driver.find_element(By.ID,"kw")
#driver.find_element(By.CLASS,"s_ipt")

#向搜索框中输入数据
input.send_keys("python")
#input.send_keys(Keys.ENTER)

#点击搜索按钮
#perform() 方法是必须的。它的作用是执行之前链式操作中定义的所有动作。
#click这些事件只有在执行到perform时才会被执行
search = driver.find_element(By.ID,"su")
ActionChains(driver).click(search).perform()

time.sleep(5)

driver.close();

 xpath方法

XPath 是一种 XML 路径,用于浏览页面的 HTML 结构。它是一种语法或者语言用来查找使用 XML 路径表达的网页中的任意元素

而html就是一种特殊的xml,所以可以利用xpath来查找html中元素

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。如:

/html/body/div[1]/div[2]/div[1]/input

和我们平时看到的文件路径相似

C:/Users/h/AppData 

xpath结点

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及根节点

为了解释,我拿一段代码作为示例

<html xmlns:namespace="http://www.example.com">
<head>
<meta charset="utf-8">
<title>xpath教程</title>
</head>
<body>
 
<!-- 测试 HTML -->
<h1 name="header">我的第一个标题</h1>
 
<p>我的第一个段落。</p>
 
</body>
</html>

对于上面的代码:

  1. <html> 就是根节点
  2. 每个标签都是一个元素,比如:<h1>我的第一个标题</h1>
  3.  <h1 name="header">中的name=“header”就是一个属性
  4. <p>我的第一个段落。</p> 中的“我的第一个段落。”就是文本
  5. <html xmlns:namespace="http://www.example.com">中的namespace就是命名空间
  6. <!-- 测试 HTML -->就是一个注释

节点之间的关系有,父子,同胞等

路径表达式

(图片来源网络,侵删)

和我们平时看到的路径类似,只不过一个是结点,一个是文件夹

问题://div/span 和 //div//span 有什么区别?

//div/span:选择div元素的子节点中的span
//div//span:选择div元素中的所有span的结点
比如对于下面的html,使用“//div/span”只能选中一个span,但是使用"//div//span"可以选中两个span

<div>
  <span>Hello<span>
  <ul>
     <span>World</span>
  </ul>
<div>

节点和元素的区别

以 * 和 node()为例:

//*:选中了5个元素:(5) [html, head, title, body, div.box]
//node():选中了8个节点:(8) [<!DOCTYPE html>, html, head, title, text, body, div.box, text]
 

<!DOCTYPE html>
<html>
	<head>
		<title>题目</title>
	</head>
	<body>
		<div class="box">Hello</div>
	</body>
</html>

轴相当于是利用节点之间的关系定位节点

语法规则:轴名称::节点测试[谓语]

看完下面的例子就对这个轴的使用理解深刻了

 注:图片来源博主:兰亭序咖啡

总结的规律:

所有的child::XXX 都可以直接写XXX

比如://a//child::text()   --> //a//text()

           //div//child::input --> //div//input

到这里关于自动化测试简单的示例就结束了,如果有任何疑问的,欢迎私信或评论区留言~

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

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

相关文章

QSpice-(4) 层次化电路设计

QSpice-(4) 层次化电路设计 在电路规模日渐庞大的现在&#xff0c;单靠一个人把整个电路做完可能还有点麻烦&#xff0c;但也不是不可能&#xff0c;还是要怀揣着那种热情把电路做好,在电路规模比较大的时候我们通常会将电路放到子电路里面去&#xff0c;这个子电路相当于C代…

数据结构——线性表(C语言实现)

写在前面&#xff1a; 在前面C语言的结构体学习中&#xff0c;我提及了链表的操作&#xff0c; 学习数据结构我认为还是需要对C语言的数组、函数、指针、结构体有一定的了解&#xff0c;不然对于结构体的代码可能很难理解&#xff0c;特别是一些书籍上面用的还是伪代码&#xf…

Python 实现股票指标计算——RSI

RSI - 相对强弱指标 1 公式 1.1 第一种计算公式 假设A为N日&#xff08;N一般取值为6、14、21&#xff09;内收盘价的正数之和 B为N日内&#xff08;N一般取值为6、14、21&#xff09;收盘价的负数之和乘以&#xff08;-1&#xff09; 这样&#xff0c;A和B均为正&#xf…

小红书笔记怎么写才能上热门?

文末领取小红书电商开店运营教程&#xff01; 小红书作为一个拥有亿级用户的社交电商平台&#xff0c;无数人通过这里分享自己的生活点滴和购物心得。 你是不是也想让自己的小红书笔记上热门&#xff0c;获得更多的曝光和关注呢&#xff1f; 今天&#xff0c;我们就来揭秘一…

2024最新MidJourney设计Logo教程+提示词原理

你是否已经看过许多别人分享的 MJ 咒语&#xff0c;却仍无法按照自己的想法画图&#xff1f;通过学习 MJ 的提示词逻辑后&#xff0c;你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑&#xff0c;让你在阅读后即可轻松上手&#xff0c;制作出…

应急靶场(2):Windows Server 2022 - Web1

目录 一、攻击者的shell密码 二、攻击者的IP地址 三、攻击者的隐藏账户名称 四、攻击者挖矿程序的矿池域名(仅域名) 五、有实力的可以尝试着修复漏洞 下载好靶场&#xff08;前来挑战&#xff01;应急响应靶机训练-Web1&#xff09;并搭建好环境&#xff0c;无需密码直接进入靶…

[Spring] Spring Web MVC案例实战

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【堆 优先队列 第k大】2551. 将珠子放入背包中

本文涉及知识点 堆 优先队列 第k大 LeetCode2551. 将珠子放入背包中 你有 k 个背包。给你一个下标从 0 开始的整数数组 weights &#xff0c;其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k 。 请你按照如下规则将所有的珠子放进 k 个背包。 没有背包是空的。 如果第…

数据采集监控平台:挖掘数据价值 高效高速生产!

在当今数字化的时代&#xff0c;数据已成为企业非常宝贵的资产之一。然而&#xff0c;要充分发挥数据的潜力&#xff0c;离不开一个强大的数据采集监控平台&#xff0c;尤其是生产制造行业。它不仅是数据的收集者&#xff0c;更是洞察生产的智慧之眼&#xff0c;高效高速处理产…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型-课后作业

在内核源码中搜索 platform_device_register 可以得到很多驱动&#xff0c;选择 一个作为例子&#xff1a; ① 确定它的名字 ② 根据它的名字找到对应的 platform_driver ③ 进入 platform_device_register/platform_driver_register 内部&#xff0c;分析 dev 和 drv 的匹配过…

[WUSTCTF2020]level4题解 入土为安的第三天

二叉树 Practice my Data Structure code..... Typing....Struct.....char....*left....*right............emmmmm...OK! Traversal! Traversal type 1:2f0t02T{hcsiI_SwA__r7Ee} Traversal type 2:20f0Th{2tsIS_icArE}e7__w Traversal type 3: //type3(&x[22]); No w…

Ubuntu/Linux 安装ITKSnap

文章目录 1. 安装ITKSnap1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 1. 安装ITKSnap http://www.itksnap.org/pmwiki/pmwiki.php?nMain.HomePage 1.1 下载后安装 找到下载的文件夹&#xff0c;文件夹内打开terminal。复…

Windows系统中MySQL的安装和卸载(详细包含msi和zip下载方式,以及完全卸载方法,易出现问题及解决方案等)

MySQL的安装: 第一种:msi安装(交简单,但是不能自定义安装路径) 下载地址:https://dev.mysql.com/downloads/installer/ 选择历史版本 选择安装版本,这里我选择的是8.0.37的版本,然后点击Download下载离线安装包 如下图即为下载好的版本,双击打开安装 出现如下情况,…

Git操纵本地仓库和远程仓库

git是一个代码托管的平台&#xff0c;我们可以对我们的代码进行分支 推送提交 打标签等等操作&#xff0c;而且git使用过程中也是支持一些linux语言的 比如cd呀 touch mkdir啊等等等 git的具体安装过程就不再赘述 我个人认为 好多东西就是 代码也好 文字 文档 也好&…

Centos7 桌面版安装ToDesk远程控制;linux安装Todesk远程控制;linux远程桌面方案

获取安装包&#xff1a; https://dl.todesk.com/linux/todesk-v4.7.2.0-c7-x86_64.rpm 得到 这个文件就是linux的安装包&#xff0c;后缀名就是rpm&#xff0c;类似windows下的exe 将此文件以你的方式&#xff0c;放到linux中&#xff0c;放哪都行 我使用的FileZila&#xf…

新手教学系列——简单的服务配置项集中管理

前言 在开发和运维过程中&#xff0c;配置管理是一个非常重要但经常被忽视的环节。常用的配置文件格式包括env、ini和yaml等&#xff0c;它们非常适合模块级别的系统配置&#xff0c;尤其是一些敏感信息的配置&#xff0c;例如数据库连接字符串和密码等。但是&#xff0c;对于…

【系统架构设计】数据库系统(一)

数据库系统&#xff08;一&#xff09; 数据库模式与范式数据库的结构与模式数据模型关系代数数据的规范化反规范化 数据库设计事务管理备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库的结构与模式 数据库技术中采用分级的方法将数据库的结…

释放DOE的能量,快速确定最佳工艺设置,节省时间、成本和资源

您是否希望降低成本、提高生产效率&#xff0c;并最大限度地减少行业对环境的影响&#xff1f; 所有行业&#xff0c;尤其是钢铁、铝、水泥和石化等能源密集型行业&#xff0c;都面临着应对这些挑战的持续压力。供应链压力、可持续发展、严格的监管环境、日益增长的消费者预期…

Transformer中高级位置编码的介绍和比较:Linear Rope、NTK、YaRN、CoPE

在处理诸如文本之类的序列时&#xff0c;排序信息显然是至关重要的。为了结合排序信息而不是将序列视为集合&#xff0c;对位置信息进行编码是至关重要的。位置编码通过为每个位置分配嵌入向量并将其添加到相应的标记表示来实现这一点。绝对和相对位置编码是最常见的两种位置编…

外贸行业汽车销售配件展示企业网站源码系统 带完整的源代码包以及搭建教程

系统概述 随着全球贸易的不断深化&#xff0c;外贸行业对于高效、专业的网站需求日益凸显。特别是对于汽车销售配件企业而言&#xff0c;一个功能全面、展示效果出色的网站源码系统&#xff0c;无疑是企业开拓海外市场、提升品牌形象的关键。本文将详细介绍一款专为外贸行业汽…