【自动化Selenium】Python 网页自动化测试脚本(上)

目录

1、Selenium介绍

2、Selenium环境安装

3、创建浏览器、设置、打开

4、打开网页、关闭网页、浏览器

5、浏览器最大化、最小化

6、浏览器的打开位置、尺寸

7、浏览器截图、网页刷新

8、元素定位

9、元素交互操作

10、元素定位

(1)ID定位

(2)NAME定位

(3)CLASS_NAME定位

(4)TAG_NAME定位

(7)CSS_SELECTOR定位

(8)XPATH定位


1、Selenium介绍

(1)自动化:自动化是指使用技术手段模拟人工。执行重复性任务,准确率100%,高于人工。

(2)自动化应用场景:自动化测试;自动化运维;自动化办公;自动化游戏

(3)Selenium:是web自动化中的知名开源库,通过浏览器驱动控制浏览器,通过元素定位模拟人工交换;支持多种浏览器;跨平台、兼容性高;以实现web自动化(无焦点状态依然执行)

2、Selenium环境安装

(1)浏览器的安装

安装好了看版本右上角三个点->[帮助]->[关于Google Chrome ],然后关闭Chrome浏览器自动更新服务[开始搜索‘服务’,关于Chrome的都可以禁用]!!!

(2)浏览器驱动的安装

Chrome for Testing availability

保证浏览器与驱动大版本一致

下载后就可以拖到工程项目中了

3、创建浏览器、设置、打开

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动

#创建设置浏览器对象
q1=Options()

#禁用沙盒模式
q1.add_argument('--no-sandbox')

#保持浏览器打开状态(默认是代码执行完毕后自动关闭)
q1.add_experimental_option('detach',True)

#创建并启动浏览器
a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)

 点击运行就会打开Chrome浏览器

注意:沙盒模式在有些电脑必须设置的,因为存在某些冲突,所以必须设置,但是大多数电脑时可以不用添加的!

4、打开网页、关闭网页、浏览器

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
import time

#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()

#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(3)
#关闭当前标签页[只会关闭一个标签页;当只有一个标签页时,就相当于关闭浏览器]
a1.close()
time.sleep(3)
#退出浏览器
a1.quit()

页面的渲染是需要花费时间的,所以大家酌情添加time.sleep(second)

5、浏览器最大化、最小化

from os import times_result

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
import time

#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()

#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器的最大化
a1.maximize_window()
time.sleep(2)
#浏览器的最小化
a1.minimize_window()

6、浏览器的打开位置、尺寸

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
import time

#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()

#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器的打开位置
a1.set_window_position(0,0)
#浏览器打开尺寸
a1.set_window_size(600,600)

7、浏览器截图、网页刷新

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
import time

#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()

#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器截图
a1.get_screenshot_as_file('1.png')
time.sleep(2)
#刷新当前网页
a1.refresh()

8、元素定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time


#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()

#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#定位一个元素[找到的话返回结果,找不到的话就会返回空列表]
a2=a1.find_element(By.ID,'kw')
print(a2)

#定位多个元素[找到的话返回列表,找不到的话直接报错]
a3=a1.find_elements(By.ID,'kw')
print(a3)

9、元素交互操作

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time


#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
a2=a1.find_element(By.ID,'kw');
#元素输入
a2.send_keys('自动化测试')
time.sleep(2)
#元素清空
a2.clear()
time.sleep(2)
#元素输入
a2.send_keys('测试')
#元素点击
a1.find_element(By.ID, 'su').click()

10、元素定位

(1)ID定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time


#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——ID
#1、一般通过ID定位元素使比较准确的
#2、并不是所有的网页或者元素都有ID值
a1.find_element(By.ID,'kw').send_keys('自动化测试')

(2)NAME定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time


#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——NAME
#1、一般通过name定位元素是比较准确的
#2、并不是所有的网页或者元素都有name值
a1.find_element(By.NAME,'wd').send_keys('自动化测试')

(3)CLASS_NAME定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——CLASS_NAME
#1、class值不能有空格,否则报错
#2、class值会有重复的,所以需要切片处理
#3、class值有的网站是随机的,这时候就不得不用别的定位方式哦
a1.find_elements(By.CLASS_NAME,'c-font-normal')[1].click()

(4)TAG_NAME定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/bilibili.com/')
time.sleep(2)

#元素定位——TAG_NAME
#找出<开头便签名字>
a1.find_elements(By.TAG_NAME,'a')[6].click()

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——LINK_TEXT
#通过精准链接文本找到标签a的元素[精准文本]
#有重复的文本,需要切片
a1.find_element(By.LINK_TEXT,'新闻').click()

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/bilibili.com/')
time.sleep(2)

#元素定位——PARTIAL_LINK_TEXT
#通过模糊链接文本找到标签a的元素[模糊文本]
#有重复的文本,需要切片
a1.find_element(By.PARTIAL_LINK_TEXT,'音').click()

(7)CSS_SELECTOR定位

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——CSS_SELECTOR
#1、通过id定位——#id
#2、通过class值定位——.class
#3、通过标签头定位——标签头
#4、通过任意类型定位:"[类型='精准值']"
#5、通过任意类型定位:"[类型*='模糊值']"
#6、通过任意类型定位:"[类型^='开头值']"
#7、通过任意类型定位:"[类型$'结尾值']"
a1.find_element(By.CSS_SELECTOR,'#kw').send_keys('hello')

(8)XPATH定位

Copy XPath:通过属性+路径定位,属性如果是随机的就定位不到

Copy full XPath:完整路径(缺点是定位值比较长,优点是基本100%正确)

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——XPath
a1.find_element(By.XPATH,'//*[@id="kw"]').send_keys('hello')

from selenium import webdriver  #用于操作浏览器
from selenium.webdriver.chrome.options import Options  #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service  #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():
    q1=Options()
    q1.add_argument('--no-sandbox')
    q1.add_experimental_option('detach',True)
    a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
    return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)

#元素定位——XPath
a1.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('hello')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PTA】【数据库】【SQL命令】编程题2

数据库SQL命令测试题2 测试题目录 10-1 查询“李琳”老师所授课程的课程名称10-2 查询成绩比所有课程的平均成绩高的学生的学号及成绩10-3 创建带表达式的视图StuView10-4 从视图PerView中查询数据10-5 查询工资高于在“HR”部门工作的所有员工的工资的员工信息10-6 查询选修的…

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列&#xff0c;要求尽可能少地添加若干括号使得括号序列变得合…

24.100ASK_T113-PRO 驱动摄像头(V4L2)

1.在buildroot 中使能 V4L库 使用make menuconfig命令之后弹出编译菜单选项&#xff1a; 2.按下 / 输入 "libv4l 后回车进行搜索&#xff0c;有2个搜索结果&#xff0c; 3.按下 1 进行跳转 4.按下 / 输入 fswebcam 后回车进行搜索&#xff0c;有1个搜索结果&#xff0c; …

【测试工具JMeter篇】JMeter性能测试入门级教程(二)出炉,测试君请各位收藏了!!!

上篇文章&#xff1a;CSDN 我们介绍了JMeter的一些原理介绍&#xff0c;以及安装配置和启动流程&#xff0c;本文我们就来讲讲JMeter如何使用。 一、JMeter目录结构组成 1. 根目录 Jmeter安装包解压后的根目录如下图&#xff1a; 1.1 backups目录&#xff1a;脚本备份目录&am…

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨…

【pyspark学习从入门到精通19】机器学习库_2

目录 估计器 分类 回归 聚类 管道 估计器 估计器可以被看作是需要估算的统计模型&#xff0c;以便对您的观测值进行预测或分类。 如果从抽象的 Estimator 类派生&#xff0c;新模型必须实现 .fit(...) 方法&#xff0c;该方法根据在 DataFrame 中找到的数据以及一些默认或…

微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 框架 2.0 服务调用 2.1 RestTemplate 远程调用 3.0 服务注册和发现 3.1 注册中心原理 3.2 Nacos 注册中心 …

C语言解析命令行参数

原文地址&#xff1a;C语言解析命令行参数 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 C语言有一个 getopt 函数&#xff0c;可以对命令行进行解析&#xff0c;下面给出一个示例&#xff0c;用的时候可以直接copy过去修改&#xff0c;很方便…

深度学习:GPT-1的MindSpore实践

GPT-1简介 GPT-1&#xff08;Generative Pre-trained Transformer&#xff09;是2018年由Open AI提出的一个结合预训练和微调的用于解决文本理解和文本生成任务的模型。它的基础是Transformer架构&#xff0c;具有如下创新点&#xff1a; NLP领域的迁移学习&#xff1a;通过最…

过滤条件包含 OR 谓词,如何进行查询优化——OceanBase SQL 优化实践

这篇博客涉及两个点&#xff0c;一个是 “OR Expansion 改写”&#xff0c;另一个是 “基于代价的改写”。 背景 在写SQL查询时&#xff0c;难以避免在过滤条件中使用 OR 谓词&#xff0c;但其往往会导致索引利用效率下降的问题 。本文将分享如何通过查询改写的2种方式进行优化…

C语言函数递归经典题型——汉诺塔问题

一.汉诺塔问题介绍 Hanoi&#xff08;汉诺&#xff09;塔问题。古代有一个梵塔&#xff0c;塔内有3个座A、B、C&#xff0c;开始时&#xff21;座上有64个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。有一个老和尚想把这64个盘子从&#xff21;座移…

【Python】九大经典排序算法:从入门到精通的详解(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序)

文章目录 1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 选择排序&#xff08;Selection Sort&#xff09;3. 插入排序&#xff08;Insertion Sort&#xff09;4. 归并排序&#xff08;Merge Sort&#xff09;5. 快速排序&#xff08;Quick Sort&#xff09;6. 堆排序&…

lua除法bug

故事背景&#xff0c;新来了一个数值&#xff0c;要改公式。神奇的一幕出现了&#xff0c;公式算出一个非常大的数。排查是lua有一个除法bug,1除以大数得到一个非常大的数。 function div(a, b)return tonumber(string.format("%.2f", a/b)) end print(1/73003) pri…

STM32 USART串口发送+接收

单片机学习&#xff01; 目录 前言 一、串口发送配置步骤 二、详细步骤 2.1 RCC开启USART和GPIO时钟 2.2 GPIO初始化 2.3 配置USART 2.4 开启USART 2.5 总初始化代码 三、接收数据 3.1 查询方法 3.2 中断方法 3.2.1 中断配置 3.2.2 接收函数 总结 前言 上篇博文介…

网络安全事件管理

一、背景 信息化技术的迅速发展已经极大地改变了人们的生活&#xff0c;网络安全威胁也日益多元化和复杂化。传统的网络安全防护手段难以应对当前繁杂的网络安全问题&#xff0c;构建主动防御的安全整体解决方案将更有利于防范未知的网络安全威胁。 国内外的安全事件在不断增…

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…

【数据结构实战篇】用C语言实现你的私有队列

&#x1f3dd;️专栏&#xff1a;【数据结构实战篇】 &#x1f305;主页&#xff1a;f狐o狸x 在前面的文章中我们用C语言实现了栈的数据结构&#xff0c;本期内容我们将实现队列的数据结构 一、队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端…

RHCSA作业

课后练习 将整个 /etc 目录下的文件全部打包并用 gzip 压缩成/back/etcback.tar.gz [rootlocalhost ~]# tar -czvf /back/etcback.tar.gz -C / etc 使当前用户永久生效的命令别名&#xff1a;写一个命令命为hello,实现的功能为每输入一次hello命令&#xff0c;就有hello&#…

java:拆箱和装箱,缓存池概念简单介绍

1.基本数据类型及其包装类&#xff1a; 举例子&#xff1a; Integer i 10; //装箱int n i; //拆箱 概念&#xff1a; 装箱就是自动将基本数据类型转换为包装器类型&#xff1b; 拆箱就是自动将包装器类型转换为基本数据类型&#xff1b; public class Main {public s…