基于Python Selenium web测试工具 - 基本用法详解

这篇文章主要介绍了Selenium(Python web测试工具)基本用法,结合实例形式分析了Selenium的基本安装、简单使用方法及相关操作技巧,需要的朋友可以参考下

本文实例讲述了Selenium基本用法。分享给大家供大家参考,具体如下:

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

安装

pip install selenium

安装驱动程序

下面介绍几种主流浏览器的驱动程序下载地址:

在这里插入图片描述

下面以windows环境,Chrome浏览器为例,我下载的是2.36版本的驱动chromedriver_win32.zip,解压得到一个chromedriver.exe文件,将其放置在浏览器的安装目录之下,如图所示:

图片

selenium的简单用法

如果你已经按照上面安装了selenium,并且安装了驱动程序,下面来简单的玩一玩selenium:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 创建Chrome WebDriver实例,此路径为驱动程序的路径
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
# 加载URL网页
driver.get("http://www.baidu.com/")
# 判断标题中是否包含该字符串
assert "百度一下" in driver.title
# 查找id=kw的节点
element = driver.find_element_by_id("kw")
# 清空原有的输入,输入python进行搜索
element.clear()
element.send_keys("python")
element.send_keys(Keys.RETURN)
# 判断是否有结果返回
assert "No results found." not in driver.page_source
# 关闭当前标签,也可以使用quit()关闭浏览器
driver.close()

上面的栗子,简单介绍了一下selenium的用法,接下来将结合selenium与unittest来编写测试:

import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 继承至TestCase,表示这是一个测试用例类
class BaiduCase(unittest.TestCase):# 初始化的一部分def setUp(self):self.driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")# 测试用例方法,名称可以自定义,方法名称始终以test开头def test_serch(self):self.driver.get("https://www.baidu.com/")assert "百度一下" in self.driver.titleelement = self.driver.find_element_by_id("kw")element.clear()element.send_keys("python")element.send_keys(Keys.RETURN)assert "No results found." not in self.driver.page_source# 在执行完各种测试用例方法之后会执行,为一个清理操作def tearDown(self):self.driver.close()
if __name__ == "__main__":unittest.main()

执行上面的代码,将会返回如下信息:

.
----------------------------------------------------------------------
Ran 1 test in 2.914s
OK

值得注意的是,如果没有配置驱动,或者路径写错了,将会出现WebDriverException错误

与网页互动

与一个网页进行的真正的交互,具体的说,与网页的HTML元素进行交互。如果需要与之交互,那么久必须要查找到HTML的元素。WebDriver提供了多种查找HTML元素的方法。例如,给定一个元素为:

<input type="text" name="passwd" id="passwd-id"/>

我们可以使用下面任意方法查找到它:

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

值的注意的是,使用xpath进行匹配时,如果有多个元素与查询匹配,只会返回第一个元素。如果什么都找不到,将会返回NoSuchElementException错误。当你查找到一个元素时,你可以用它做什么?首先你可能会想到在文本标签中输入一些文本:

element.send_keys("python")

也可以使用Keys来模拟一些箭头键:

from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.ARROW_DOWN)

你也可以使用clear()方法来清除文本标签里的内容:

element.clear()

切换下拉菜单的状态,我们可以依次循环选择每个选项并依次选择每个选项:

element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:option.click()

正如你所看到的,这并不是处理select元素的最有效的方式。WebDriver类包还包括一个名为Select的类,它提供了与这些类交互的有用的方法:

from selenium.webdriver.support.ui import Select
element = driver.find_element_by_xpath("//select[@name='name']")
select = Select(element)
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value("value")

WebDriver还提供取消选择所有选项的功能:

element = driver.find_element_by_id('id')
select = Select(element)
select.deselect_all()

Select还具有获取所有已经选中的标签的方法:

element = driver.find_element_by_id('id')
select = Select(element)
all_options = select.all_selected_options

获取所有可用的选项:

options = select.options

完成后表格填写后,您可以需要提交,一种方法是找到submit按钮并点击它:

driver.find_element_by_id('submit').click()

WebDriver在每个元素上都有一个submit的便利方法,如果你在一个表单的元素上调用它,Webdriver会遍历DOM直到包含表单,然后调用它:

element.submit()

WebDriver还提供了前进与后退的操作:

driver.forward()
driver.back()

WebDriver还可以进行设置Cookies和获取Cookies:

driver.get('https://www.baidu.com/')
driver.add_cookie({"name":"foo","value":"laozhang"})
print(driver.get_cookies()

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

如何查看热门GPT应用?

1、登陆chatgpt 2、访问 https://chatgpt.com/gpts 3、在该界面&#xff0c;可以搜索并使用image generator, Write For Me&#xff0c;Language Teature等热门应用。

嵌入式C语言中结构体使用详解

各位开发者大家好,今天给大家分享一下,嵌入式C语言中结构体的使用方法。 第一个:内存对齐 内存对齐是指一个数据类型在内存中存放时,对其地址的要求。简单来说内存对齐就是使得其内存地址是该类型大小的整数倍,例如 double 类型的变量,其内存地址需要是8的倍数(double大…

深入理解 Mysql 分层架构:从存储引擎到查询优化器的内部机制解析

一、基础架构 1.连接器 1.会先连接到这个数据库上&#xff0c;这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接 2.用户密码连接成功之后&#xff0c;会从权限表中拿出你的权限&#xff0c;后续操作权限都依赖于此时拿出的权限,这就意味着当链…

SVM兵王问题

1.流程 前面六个就是棋子的位置&#xff0c;draw就是逼和&#xff0c;后面的数字six就代表&#xff0c;白棋最少用六步就能将死对方。然后呢&#xff0c;可以看一下最后一个有几种情况&#xff1a; 2.交叉测试 leave one out&#xff1a; 留一个样本作测试集&#xff0c;其余…

Django 里的静态资源调用

静态资源&#xff1a;图片&#xff0c;CSS, JavaScript 一共有两种方法 第一种方法 在项目的文件夹里创建名为 static 文件夹 在该文件夹里&#xff0c;添加静态资源 在 settings.py 里添加路径 import os# Static files (CSS, JavaScript, Images) # https://docs.djan…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

搭建Harbor镜像仓库

前言 1、系统版本&#xff1a;CentOS9 2、harbor版本&#xff1a;v2.9.4 3、提前安装好docker和docker-compose&#xff0c;参考地址。我这里安装的版本是docker&#xff1a;26.1.3 docker-compose&#xff1a;v2.27.1 安装步骤 下载安装包 1、下载地址&#xff1a;ha…

fastadmin 树状菜单展开,合并;简要文件管理系统界面设计与实现

一&#xff0c;菜单合并效果图 源文件参考&#xff1a;fastadmin 子级菜单展开合并、分类父级归纳 - FastAdmin问答社区 php服务端&#xff1a; public function _initialize() {parent::_initialize();$this->model new \app\admin\model\auth\Filetype;$this->admin…

企业如何做好 SQL 质量管理?

研发人员写 SQL 操作数据库想必一定是一类基础且常见的工作内容。如何避免 “问题” SQL 流转到生产环境&#xff0c;保证数据质量&#xff1f;这值得被研发/DBA/运维所重视。 什么是 SQL 问题&#xff1f; 对于研发人员来说&#xff0c;在日常工作中&#xff0c;大部分都需要…

代码随想录算法训练营第三十六天 | 1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

目录 1005.K次取反后最大化的数组和 思路 代码 代码 134.加油站 思路 代码 135.分发糖果 思路 代码 1005.K次取反后最大化的数组和 本题简单一些&#xff0c;估计大家不用想着贪心 &#xff0c;用自己直觉也会有思路。 代码随想录 思路 直觉&#xff0c;直接写&…

7. C++通过select的方式实现高性能网络服务器

什么是异步IO 异步IO指的是用户程序将IO请求提交后,无需等待IO操作的完成,而是可以继续处理别的事情。 所谓异步IO&#xff0c;是指以事件触发的机制来对IO操作进行处理。 与多进程和多线程技术相比&#xff0c;异步I/O技术的最大优势是系统开销小&#xff0c;系统不必创建进程…

《Ai学习笔记》-模型集成部署

后续大多数模型提升速度和精度&#xff1a; 提升速度&#xff1a; -知识蒸馏&#xff0c;以distillBert和tinyBert为代表 -神经网络优化技巧。prune来剪裁多余的网络节点&#xff0c;混合精度&#xff08;fp32和fp26混合来降低计算精度从从而实现速度的提升&#xff09; 提…

【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸,1页6张黑白,1张6张白卡)

背景需求&#xff1a; 前期制作了黑白三角拼图2*2、3*3、4*4&#xff0c;确定了基本模板&#xff0c;就可以批量制作更多格子数 【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;固定256种随机抽取10张-CSDN博客文章浏览阅读522次&#xff0c;点赞13次&#x…

高中数学:平面向量-题型总结及解题思路梳理

一、知识点及解题思路梳理 高中&#xff0c;2/3的向量题目是坐标向量题&#xff0c;1/3是几何向量题。但是&#xff0c;这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2

【机器学习300问】100、怎么理解卷积神经网络CNN中的池化操作?

一、什么是池化&#xff1f; 卷积神经网络&#xff08;CNN&#xff09;中的池化&#xff08;Pooling&#xff09;操作是一种下采样技术&#xff0c;其目的是减少数据的空间维度&#xff08;宽度和高度&#xff09;&#xff0c;同时保持最重要的特征并降低计算复杂度。池化操作不…

若依 Ruoyi-Vue PageHelper 分页失效 total为记录数

分页插件PageHelper返回记录总数total竟然出错了 执行控制台的SQL&#xff0c;查询出来的total数量是对的&#xff0c;很奇怪分页的total设置为查询到的记录数。 怀疑对list.stream操作&#xff0c;影响了分页&#xff0c;代码发现确实是这样&#xff0c;debug&#xff0c;居然…

firewalld 防火墙

firewalld概述 Linux系统防火墙从CentOS7开始的默认防火墙工作在网络层&#xff0c;属于包过滤防火墙 Firewalld和iptables的关系 netfilter 位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态” firewalld Centos默认的管理防火墙规则的工具称为防火墙的“用…

Gradient-checkpointing的原理

原文&#xff1a; 将更大的网络安装到内存中。|by 雅罗斯拉夫布拉托夫 |张量流 |中等 (medium.com) 前向传播时&#xff0c;隔几层就保留一层activation数据&#xff0c;其余层的activation都释放掉&#xff1b; 反向传播时&#xff0c;从最近的checkpoint去重新跑forward&…

Ps:消失点滤镜 - 测量工具

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V “消失点”滤镜中的测量工具 Measure Tool用于在透视平面内测量图像中对象的大小&#xff0c;适用于建筑师、设计师、法医和木工等需要精确测量的用户。 快捷键&#xff1a;R ◆ ◆ ◆…

基于springboot+vue的4S店车辆管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…