Selenium 自动化测试—如何搭建自动化测试环境

🍅 视频学习:文末有免费的配套视频可观看

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的代码,发现有些东西没有,有些方法又不相同,导致脚本不能运行,提醒我,看是否能花点时间,把selenium的内容好好梳理一下,从基础开始,到能够梳理出一个selenium的知识图谱更好。

整个内容可能不是一次能写完的,所以我打算分多次来写,如果各位看完后,有什么问题也可以发信息给我,我给大家解答一下,写这个也是为了方便在未来selenium还会有新的版本更新,以后也方便做个对比。

本次内容从一下几个方面来写吧:

  1. selenium的作用
  2. selenium版本的介绍
  3. selenium工作原理
  4. selenium安装
  5. 浏览器基本操作

1、selenium的介绍

Selenium是Thought Works公司开发的一套基于web应用的自动化测试工具,直接运行在浏览器中,模拟用户操作。它可以被用于单元测试、集成测试、回归测试、系统测试、冒烟测试、验收测试,并且可以运行在各种浏览器和操作系统上。
目前使用selenium的人群大概有两大类吧,一类是软件测试工程师,他们可以通过selenium来实现自动化的测试,以提高回归测试的效率,降低人员的执行成本。第二类可能就是很多写爬虫的人,因为现在网页端爬取数据的人有很多,服务端做了很多的反爬策略,及各种限制如动态加载等,单独的通过接口来爬取数据的难度和可行性有所降低,而selenium可以模拟人为的在页面上执行各种操作,那么各种反爬的手段可能对它来讲也就没有什么意义了,当然也有人说,还有各种验证码也会有影响,验证码的问题我们今天先不谈,后面我看是否可以单独出一篇对验证码处理的文章。

2、selenium的版本介绍

selenium从发布到至今经历了1、2、3、4个版本,截止目前发布的最新版本是4.7版本,版本跨度最大的其实是1.0版本到2.0版本,1.0版本中包含了ide、Grid、core和rc四大部分,2.0在1.0基础上加入了webdriver,webdriver提供了更为简单的编程接口,弥补了1.0中Selenium-RC的一些不足和限制,对外提供了更简洁的restfull的API接口。

selenium1.0的主要内容:

  1. DE:可以通过IDE完成测试过程的录制和回放。主要用来给初学者了解selenium,但不适合直接作为日常自动化的测试。
  2. Grid:是selenium部署、测试及执行(分布式测试用例执行)。
  3. RC:selenium Remote Control,一个代理与控制器。
  4. Core:selenium的测试机制核心部分,包含测试用例集的执行,断言,由js代码组成,支持夸平台运行。

selenium2.0 = selenium1.0 + webdriver

3、selenium工作原理

image

3.1、客户端(selenium支持多种编程语言,所以客户端的请求可以使用各种语言来调用接口),selenium 通过调用WeDriver类的start方法去启动浏览器驱动,创建服务的启动。
3.2、通过服务端返回的session id,在下一次请求时,携带这个id,将客户端要执行的操作发送给服务端,服务端解析用户发送请求中的操作,并将操作指令发送给浏览器去执行。
3.3、浏览器执行客户端操作,并将操作的结果返回给服务端,服务端将执行结果进行封装,并返回给客户端。
客户端在启动服务端时,服务端会启动一个9515的端口用来与客户端连接,客户端调用selenium提供的方法,在由selenium将请求转化为对应的操作接口指令,根据操作指令调用对应的API接口,通过API接口调用将用户操作发送给浏览器端去执行。

这部分的内容需要在后续的过程中,解析代码来理解他的原理和过程。

4、selenium安装

安装selenium环境,这里以python 3.8的为例,安装完成python后,并且配置好python相关的环境变量,不懂的可以私信我。
需要安装的有:
1、selenium
2、浏览器驱动
3、浏览器

4.1 安装selenium

如果python环境已经安装完成,可以使用pip来安装selenium,在开始菜单中,输入cmd,打开dos窗口,执行下列命令

# 这里我选择安装的是selenium的4.0版本,有部分3.0的内容,在4.0中没有彻底删除,还可以使用,如果使用高版本,那变更的内容将不能再使用了
pip install selenium==4.0
# 或
pip3 install selenium==4.0
# 如果安装过程比较慢或者出现超时错误,则可以使用,我这里使用的是国内的清华源安装的,相对稳定点
pip3 install selenium==4.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

4.2 安装浏览器驱动

安装浏览器驱动,需要根据浏览器来决定,使用不同的浏览器,就需要选择不同的浏览器驱动,浏览器驱动也需要根据浏览器的版本来考虑,所以浏览器、浏览器版本要与浏览器驱动及驱动版本向对应,下面列出几种常见浏览器的驱动下载地址
1、Chrome(Google)浏览器
先确定自己浏览器的版本,在chrome浏览器中的帮助中,查看关于,上面会显示浏览器版本,或者直接在浏览器url地址上输入chrome://settings/help,下面这个是我浏览器的版本

image

根据版本号,在驱动下载页面中,找到对应的版本

image

image


因为我是window的系统,所以我选择chromedriver_win32.zip,下载后,将里面的chromedriver.exe文件解压出来,其实放在哪无所谓,放的地方不同后面写代码时的处理会有所区别。一般建议放在path这个环境变量能访问到的位置,或者干脆放在python的安装目录下也行

2、Firefox(火狐)浏览器
采用同样的方式下载对应版本的geckodriver驱动,Firefox的版本和geckodriver的版本对应关系如下,也可以直接去官网查看

image

3、Edge 
首先也是要确定Edge的版本,然后根据版本到官网下载驱动

image

4.3 安装浏览器

这部分内容就不再赘述,给为可以直接到官网下载安装即可,这里给新手们提醒下,安装过程中,最好不要修改安装的路径。

4.4 验证安装结果

打开pycharm,编写如下代码,如果可以打开对应的浏览器,并且跳转到百度页面,则说明安装成功。这里以Chrome浏览器为例

# 导入webdriver库
from selenium import webdriver
# 启动chrome浏览器
driver = webdriver.Chrome()
# 打开百度页面
driver.get('https://www.baidu.com')

5、浏览器基本操作

上面的代码中,已经说明了如何打开浏览器,并且跳转到指定的URL地址。下面说明下对浏览器的基本操作方法

#coding=utf-8
__author__ = 'Meteor'
from selenium import webdriver
from time import sleep
#打开一个Firefox浏览器
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
#等2秒
sleep(2)
#刷新
driver.refresh()#等2秒
sleep(2)
#后退
driver.back()
#等2秒
sleep(2)
#前进
driver.forward()
#等2秒
sleep(2)
#最小化
driver.minimize_window()
#等2秒
sleep(2)
#最大化
driver.maximize_window()#等2秒
sleep(2)
#关闭浏览器
driver.close()

除了上面的基本操作外,也可以通过Option类来配置浏览器的启动

# 导入Option类
from selenium.webdriver.chrome.options import Options
# 实例化一个Option类的对象
options = Options()# 通过Options对象的add_argument方法添加启动的配置
options.add_argument('--window-size=1366,768')  #--window-size=1366,768 表示设置浏览器的大小
# 启动浏览器,并将启动参数带入到浏览器中
driver = webdriver.Chrome(options=options)

Opetion类中的配置方式除了--window-size设置浏览器大小外,还有下面几种方式

--user-agent="" 设置请求头的User-Agent
--window-size=1366,768 设置浏览器分辨率(窗口大小)
--headless 无界面运行(无窗口)
--start-maximized 最大化运行(全屏窗口)
--incognito 隐身模式(无痕模式)
--disable-javascript 禁用javascript
--disable-infobars 禁用浏览器正在被自动化程序控制的提示

这篇就先写到这里,后面会持续更新。。。。

送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了! 

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】 

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

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

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

相关文章

【linux】体系结构和os管理

冯诺依曼体系结构 输入单元:包括键盘, 鼠标,扫描仪, 写板等 中央处理器(CPU):含有运算器和控制器等 输出单元:显示器,打印机等 这里的存储器指的是内存 三者是相互连接的,设备之间会进行数据的来回拷贝&am…

社区店经营全攻略:如何选址、运营并打造火爆生意?

随着电商的兴起,实体店的经营面临着越来越多的挑战。然而,社区店依然具有独特的优势,如便捷的地理位置、与消费者的紧密互动等。 作为在社区店开鲜奶吧5年的创业者,我深有感触,那么这篇文章将为你提供最有价值的干货信…

计算机设计大赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

深入浅出JVM(一)之Hotspot虚拟机中的对象

本篇文章思维导图 对象的创建 对象的创建可以分为五个步骤:检查类加载,分配内存,初始化零值,设置对象头,执行实例构造器 类加载检查 HotSpot虚拟机遇到一条new指令,会先检查能否在常量池中定位到这个类的符号引用,检查这个类是否类加载过 没有类加载过就去类加载类加载过就进…

基于Java+SpringBoot的旅游路线规划系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1.1 前端首页模块的实现 1.2 景点新闻 1.3 景点在线预订 1.4 酒店在线预订 1.5 管理员景点管理 1.6 管理员旅游线路管理 1.7 酒店信息管理 三、库表设计 前言 随着我国的经济的不断发展,现在的一些热门的景…

【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 类的6个默认成员函数 构造函数 特性 析构函数 特性 析构的顺序 拷贝构造函数 特性 常引用 前言 &…

HBase 进阶

参考来源: B站尚硅谷HBase2.x 目录 Master 架构RegionServer 架构写流程MemStore Flush读流程HFile 结构读流程合并读取数据优化 StoreFile CompactionRegion Split预分区(自定义分区)系统拆分 Master 架构 Master详细架构 1)Meta 表格介…

光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表

光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表 文章目录 光芒绽放:妙用“GLAD原则”打造标准的数据可视化图表前言一、可视化工具有哪些?二、那如何做出正确可视化图表 ?GLAD原则1.G原则2.L原则3.A原则4.D原则 三、总结最后…

模式匹配这么好,Java语法里有吗?

这篇文章我们借助新版Java来理解模式匹配,Rust版的模式匹配稍后就端上来,各位先尝尝Java这杯老咖啡还香不香😄。 什么是模式匹配? 下图直观的表达了模式匹配的概念。 所谓模式类似上图中木盒的各种形状的洞洞,我们…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出 通信方式:单工…

余弦退火:通过动态调整学习率增强深度学习

导 读 在快速发展的机器学习领域,特别是深度学习,训练算法的效率和有效性至关重要。学习率作为这些算法的一个关键因素,决定了梯度下降期间的步长。 而余弦退火作为用于优化学习率的一种新颖且日益流行的技术。本文将深入探讨了余弦退火的概…

SwiftUI 更自然地向自定义视图传递参数的“另类”方式

概览 在 SwiftUI 中,正是自定义视图让我们的 App 变得与众不同!然而,除了传统的视图接口定义方式以外,我们其实还可以有更“银杏化”的选择。 如上图所示:对于 SubView 子视图所需的参数我们一开始并没有操之过急&…