selenium4 自动化测试--环境安装和基础操作

2023-10-27

最近也有很多人私下问我,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)浏览器:http://chromedriver.storage.googleapis.com/index.html
先确定自己浏览器的版本,在chrome浏览器中的帮助中,查看关于,上面会显示浏览器版本,或者直接在浏览器url地址上输入chrome://settings/help,下面这个是我浏览器的版本

image

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

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

2、Firefox(火狐)浏览器:https://github.com/mozilla/geckodriver/releases
采用同样的方式下载对应版本的geckodriver驱动,Firefox的版本和geckodriver的版本对应关系如下,也可以直接去官网查看,
官网地址:https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html
image

3、Edge :https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
首先也是要确定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 禁用浏览器正在被自动化程序控制的提示

这篇就先写到这里,后面会持续更新。。。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium4 自动化测试--环境安装和基础操作 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • RemoteWebDriver 和 WebDriver 有什么区别?

    实际上 我找不到一个很好的解释来解释 RemoteWebDriver 和 Selenium 中的 WebDriver 之间的区别 下面是 eclipse 告诉我将 WebDriver 转换为 RemoteWebDriver 的代码 Remo
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • mysql中cmake常用参数说明

    mysql Mysql从5 5开始 源代码安装将原来的configure改为cmake 因此在安装mysql 5 5 x时 需要先安装cmake 可以通过源码安装 也可以通过apt get软件包安装 在用cmake配置mysql过程中 找到
  • 实时音频编解码之六 LTP长时预测

    本文谢绝任何形式转载 谢谢 1 4 6 LTP LPC方法的压缩率比较高 但是音质不高 只用LPC方法的编解码语音具有 机器音 的特征 这是由于LPC系数阶数通常取10 20点 这一长度包含了共振峰信息但并不足以囊括所有的基频周期 且LPC
  • Flutter组件学习(20)可滚动组件以及ScrollController监听

    介绍 ViewPort视口 在很多布局系统中都有ViewPort的概念 在Flutter中 术语ViewPort 视口 如无特别说明 则是指一个Widget的实际显示区域 例如 一个ListView的显示区域高度是800像素 虽然其列表项总
  • 联想电脑如何打开BIOS并开启虚拟化——以G50为例

    不少初学者学习Linux等操作系统时 总会遇到新建的虚拟机无法打开 或者是在VirtualBox选择版本的时候发现没有64 bit选项 这些都说明你的电脑没有开启CPU虚拟化 那么如何查看CPU虚拟化是否开启呢 首先第一步 在任务栏上的空白
  • 浮动和清除浮动

    浮动 非IE浏览器下 容器不设高度 且子元素浮动时 容器高度不能被内容撑开 此时 内容会溢出到容器外面而影响布局 这种现象被称为浮动 溢出 浮动元素脱离文档流 不占据空间 引起 高度塌陷 div class father div class
  • Allegro如何导入dxf文件

    以上的操作就将dxf导入到了allegro中 将板框从dxf层改到outliine层 1 选择Edit Change 2 设置Find和Options 3 选择板框 即将dxf层改到outliine层 4 修改outline的颜色 可以看的
  • # 洗牌算法

    基本概念 等概率将将一个数组N打乱 概率每次都是1 N 加上 方法一 全局洗牌 从 0到N 1的数组下标 每次随机产生两个0到 N 1之间的数 进行交换 void get rand number int array int length i
  • 计算机网络记忆点

    声明 转载还得加上链接麻烦 这只是整理自己要的东西 忘记了回头看看 顺便让大家了解了解 如果有什么侵权 请联系我 我会删除 谢谢理解 1 网络层次划分 TCP IP从下往上 物理层 数据链路层 网络层 传输层 应用层 OSI七层网络模型 物
  • chatglm实现基于知识库问答的应用

    背景 目前由于ChatGPT横空出世 互联网如雨后春笋冒出了非常多的类ChatGPT的大型语言模型 但是对于这些语言模型 我们应该如何将它应用到我们实际的生产中需要一个更加成熟的解决方案 介绍 本文旨在通过介绍ChatGLM的使用来讲述如何
  • Vue 生命周期-钩子函数介绍

    生命周期 每一个组件或者实例都会经历一个完整的生命周期 总共分为三个阶段 初始化 运行中 销毁 钩子函数 vue在整个生命周期里面提供了一些函数 可以在内部实现一些业务逻辑 并且这些函数会在一些特定的场合下去执行 在生命周期的某一个时刻进行
  • 抖音、快手、B站、小红书,品牌如何选对投放平台?

    移动互联网时代 各大平台的品牌广告迎来了爆炸式的增长 穿插在内容流中的信息流广告和KOL内容投放广告对用户来说体验相对较好 对广告主来说可以利用用户的标签进行精准投放 无论是品牌曝光还是获取转化都可满足需求 品牌该如何选择适合自己的平台 让
  • 离散元后处理,将PFC数据写出并导入到matlab中形成云图

    离散元后处理 将PFC数据写出并导入到matlab中形成云图 支持二维三维绘图 内容包括 案例文件 fish代码和matlab代码 pfc2d 3d to matlab ID 71200677036823736
  • 四篇文章带你玩转springboot——3启动源码及外部化配置

    第1章 main入口 public static void main String args 代码很简单SpringApplication run SpringApplication run ConsumerApp class args p
  • Java8常用新特性详解

    文章目录 Java8新特性纵览 Lambda表达式 为什么使用Lambda表达式 简单使用 Lambda语法规则 函数式接口 什么是函数式 Functional 接口 如何理解函数式接口 Java内置函数式接口 自定义函数式接口 方法引用
  • Android中的信息输出:System.out和Log的源码分析与对比(System.out篇)

    想必大家在编写Android程序的时候必然绕不来输出信息 对于熟悉Java的程序员来讲 他们更喜欢使用System out来输出信息 而Android开发经验更丰富的程序员则更倾向于使用Log 毕竟在调试的时候Android环境本身就会输出
  • Cannot read properties of undefined (reading ‘install‘)

    把vue rotuer的版本降低 我降低为了 3 5 4 然后终端重新跑代码
  • 对于开源软件的审查(有无后门等)

    最近公司申请安服资质 让我帮忙写个对开源软件的审查方法 就随便编了以下 如有补充还请各位扶正 其实我觉得他们为啥不怀疑windows有问题呢 非黑客攻击行为安全工具 此类工具通常为辅助测试工具 不具备直接攻击行为 且通常具有官方来源 例如
  • 开源SOLOv2,让动态实例分割更快更强更精准

    作者 介绍 作者建立一个性能强大的简单 通过动态学习对象分割器的蒙版头 使蒙版头以位置为条件 进一步提升性能 具体来说 将遮罩分支解耦为遮罩内核分支和遮罩特征分支 分别负责学习卷积内核和卷积特征 利用矩阵NMS 非最大抑制 以显着减少由于掩
  • 【七夕特辑】用python来实现跳动爱心+爱心心电图+玫瑰花+.....

    前言 什么 明天七夕 学了这么久的python 还写不出来给 对象或者心动Crush 的一个表白代码 还得是我来帮你们准备几个吧 有去年比较火的跳动爱心 也有其他的 来看看 挑选一下 领取代码后 不要忘记发给人家了 emmm先来给你们都看一
  • selenium4 自动化测试--环境安装和基础操作

    最近也有很多人私下问我 selenium学习难吗 基础入门的学习内容很多是3以前的版本资料 对于有基础的人来说 3到4的差别虽然有 但是不足以影响自己 但是对于没有学过的人来说 通过资料再到自己写的代码 发现有些东西没有 有些方法又不相同