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

目录

初始化浏览器并打开网页

定位网页元素

定位的方法

模拟键盘操作 

模拟鼠标操作

 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 Byinput = 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 Keysinput.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.mzph.cn/pingmian/46875.shtml

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

相关文章

复变偏微分方程

复变偏微分方程是一类在复数域上定义的偏微分方程。这类方程在数学物理、工程学、流体力学等领域有着广泛的应用。复变函数理论为解决这类方程提供了强有力的工具。 ### 基本定义 复变偏微分方程通常涉及复数域上的函数 \( f(z, \bar{z}) \)&#xff0c;其中 \( z \) 是复变量…

网络安全----web安全防范

以下代码用来防范流行的DDoS攻击&#xff0c;ARP欺骗&#xff0c;CC攻击&#xff0c;XXS攻击&#xff0c;对输入的恶意代码进行过滤&#xff0c;嵌入到web程序可以很好的防范网络攻击&#xff0c;但如果想要更好的防范网络攻击&#xff0c;还需要更加复杂的配置和更硬核的硬件。…

(二)高并发压力测试调优篇——caffeine本地缓存调优

前言 在上一节内容中我们主要介绍了高并发请求下&#xff0c;mysql数据库的调优&#xff0c;其调优的主要原理是尽量减少数据库的IO操作&#xff0c;从而提高服务器的访问性能。在此基础上&#xff0c;本节内容是关于如何利用缓存&#xff0c;提高系统的并发访问能力。我们会首…

Linux部署禅道(无脑复制版)

目录 环境部署1、下载&#xff0c;解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接&#xff1a; https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …

谢启昆:乾隆年间的清廉典范与学术巨擘

谢启昆&#xff0c;一位生活在清朝乾隆年间的杰出人物&#xff0c;以其清廉的政绩和卓越的学术成就&#xff0c;成为后世效仿的典范。他的画像中&#xff0c;目光如炬&#xff0c;透露出坚毅与智慧的光芒&#xff0c;仿佛在诉说着他不平凡的一生。 谢启昆出生在一个书香门第&am…

蒙特卡洛采样

目录 蒙特卡洛采样的计算逻辑计算步骤&#xff1a;1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计期望值或积分值6. 计算误差 具体示例&#xff1a;1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计积分值6. 计算误差 总结 蒙特卡洛采样是…

《C++ Templetes》《1、函数模板》

文章目录 1、函数模板1.1 函数模板的简单示例&#xff1a;1.2 模板参数1.3 实参演绎实参演绎的概念实参演绎的过程注意事项示例 1.4 函数模板的重载 2、总结3、参考 在《 Effective C》中第一个建议就是&#xff0c;把C看作是一个语言的联邦&#xff0c;其中Templates在联邦中留…

多元统计分析概述

目录 1. 多元回归分析 2. 主成分分析&#xff08;PCA&#xff09; 3. 因子分析 4. 判别分析 5. 聚类分析 6. 多维尺度分析&#xff08;MDS&#xff09; 结论 多元统计分析是一组用于分析多个变量之间关系的统计方法。它广泛应用于各个领域&#xff0c;如市场研究、生物医…

华为OD机试D卷 --可以处理的最大任务数--24年OD统一考试(Java JS Python C C++)

文章目录 题目描述输入描述输出描述用例1题目解析java源码js源码c++源码题目描述 在某个项目中有多个任务(用task数组表示)需要你进行处理,其中: task[i] = [si, ei] 你可以在 si ≤ day ≤ ei 中的任意一天处理该任务,请返回你可以处理的最大任务数。 输入描述 第一行…

PHP webshell 免杀方法

本文介绍php类webshell简单的免杀方法&#xff0c;总结不一定全面&#xff0c;仅供读者参考。 webshell通常可分为一句话木马&#xff0c;小马&#xff0c;大马&#xff0c;内存马。 一句话木马是最简单也是最常见的webshell形式&#xff0c;这种木马体积小&#xff0c;隐蔽较…

a newer or same version is present nvidia解决方案

安装时候出现a newer or same version is present nvidia 或者Night Visual Editor 失败&#xff0c;把显卡驱动卸载掉&#xff0c;打开service.mtc 服务控制面板&#xff0c;把nvidia开头的服务全停掉&#xff0c;重新启动cuda安装程序选择自定义安装 vse visual studio相关的…

学懂C#编程:常用框架学习(三)——.NET Framework框架下的Entity Framework (EF)开发应用详解

目录 一、Entity Framework概述 二、Entity Framework的核心组成部分 Entity Data Model (EDM)&#xff1a; Entity Client&#xff1a; Object Services&#xff1a; ADO.NET Provider&#xff1a; 三、分层结构 应用程序层&#xff1a; Entity Framework层&#xff…

鸿蒙语言基础类库:【@system.device (设备信息)】

设备信息 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.deviceInfo]进行设备信息查询。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import dev…

linux操作fb文件节点刷纯色

代码 #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <stdlib.h> #include <string.h>#define RED 0xF800 #define YELLOW 0xFFE0 #define BLUE 0x0…

手把手教你,如何利用积木易搭3D扫描仪完成文物三维建模?

当前&#xff0c;文物三维建模主要技术手段主要有摄影测量技术、三维激光扫描技术、结构光扫描技术。其中&#xff0c;积木易搭的MagicScan作为一款先进的3D扫描仪&#xff0c;是正是运用了结构光扫描技术的精髓&#xff0c;它巧妙地融合了点云相机的高精度空间数据采集能力、纹…

如何用python写接口

如何用python写接口&#xff1f;具体步骤如下&#xff1a;  1、实例化server 2、装饰器下面的函数变为一个接口 3、启动服务 开发工具和流程&#xff1a; python库&#xff1a;flask 》实例化server&#xff1a;server flask.Flask(__name__) 》server.route(/index,met…

【STM32嵌入式系统设计与开发---拓展】——1_9 GPIO的输入和输出

这里写目录标题 0、输入 输出1、输出&#xff08;1&#xff09;GPIO_SetBits:用于设置 GPIO 引脚的状态&#xff08;即将指定的引脚设置为高电平&#xff09; 2、输入&#xff08;1&#xff09;GPIO_ReadInputDataBit&#xff08;&#xff09; 0、输入 输出 咋们定义了一个结构…

新手程序员如何判断自己的代码是高质量还是烂代码?

“五年工作经验&#xff0c;代码质量却不如三年程序员&#xff1f;” 这句话或许有些夸张&#xff0c;却也反映出代码质量参差不齐的现状。 那么&#xff0c;究竟什么是高质量的代码&#xff1f;如何才能写出让同行称赞、让机器流畅运行的代码呢&#xff1f; 今天我们就来聊…

服务器网络配置

后来呀&#xff0c;天亮之前毕业后踏入服务器领域了。。。。。。 服务器网络配置大体流程&#xff1a;硬件选择——系统安装——驱动调用——网卡配置 1、硬件选择 驱动程序是操作系统与硬件之间通信的桥梁 服务器硬件硬件选择首先看是否还有预留槽位&#xff0c;或者riser…