首页 > 其他分享 >自动化测试-web测试

自动化测试-web测试

时间:2024-12-27 15:26:29浏览次数:3  
标签:web time element sleep 测试 自动化 find browser

目录

目录

一、环境准备

selenium测试架构简介

Selenium安装:

浏览器驱动:

二、基本测试举例

html文件

页面展示:

测试脚本:

测试结果:

三、网页的基本测试操作:

四、对象操作测试

html文件

测试code

测试结果

五、键盘鼠标操作测试

html文件

测试脚本

测试结果

六、下拉框操作测试

html文件

测试脚本

测试效果

七、特殊Dom结构及下载测试

html文件

测试脚本

结果展示

 八、cookie与屏幕裁图

测试脚本



一、环境准备

selenium测试架构简介

Selenium是一个用于测试网站应用的工具,它提供了一系列的API来帮助编写自动化测试脚本。Selenium主要由三部分组成:Selenium WebDriver、Selenium IDE 和 Selenium Grid。

Selenium WebDriver:是Selenium的核心组件,它提供了Web应用的自动化测试API。WebDriver实现了各种编程语言的API,如Java、C#、Python、JavaScript、Ruby等,允许用户编写代码来控制浏览器。CNPM Binaries Mirror (chrome WebDriver 113之后的版本下载地址)

Selenium IDE:是一个插件,可以记录和回放用户在浏览器中的操作。它可以将记录的操作导出成多种编程语言的Selenium测试脚本。

Selenium Grid:是一个用于并行运行多个Selenium测试的工具,可以在不同的机器上运行测试。

Selenium安装:

python安装: pip install Selenium  显示版本: pip show selenium   Version: 4.26.1

浏览器驱动:

找到对应浏览器的对应版本下载,将chromedriver.exe放到python.exe目录下或者配置其所在目录的环境变量

二、基本测试举例

html文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>基本页面示例</title>
		<link res="stylesheet" type="test/css" href="index.css" />
	</head>
	<body>
		<div id ='main'>
			<h1>欢迎来到我的网站</h1>
			<div class="mail-login">
				<input id='email' name='email' type='text' placeholder='手机号或邮箱'>
				<input type='password' name='password' placeholder='密码'>
				<a id="btn-login" href="#" type="button" onclick="alert('登陆成功')">
					<span class="text">登录</span>
				</a>
			</div>
		    <div id='forget-pwd'>
				<a class 'forget-pwd' href="#">忘记密码>></a>
			</div>
			<div id='register'>
				<span class='no-account'></span>还没有账号?</span>
				<a class 'register' href="#">单机注册>></a>		
			</div>
		</div>
	</body>
</html>

页面展示:

测试脚本:

from selenium import webdriver   #导入webdriver
import time
from selenium.webdriver.common.by import By
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/t.html') # 加载指定的页面
time.sleep(1)
browser.find_element(By.ID,'email').send_keys('test@test.com') #定位操作元素输入内容
browser.find_element(By.NAME,'password').send_keys('abc123')
browser.find_element(By.ID,'btn-login').click()      #单击元素
time.sleep(6)
browser.quit()                     #关闭结束进程

测试结果:

三、网页的基本测试操作:

#浏览器操作测试  加sleep防止页面跳转太快效果不明显
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/t.html') # 加载指定的页面
browser.maximize_window()      #浏览器最大化
time.sleep(1)
browser.set_window_size(400,400) #设置浏览器的宽和高
time.sleep(1)
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/') # 百度网页
time.sleep(1)
browser.find_element(By.ID, "kw").send_keys("美女")
browser.find_element(By.ID,'su').click()
time.sleep(1)
browser.back()  #浏览器后退
time.sleep(1)
browser.forward()       #浏览器前进
browser.refresh()       #浏览器涮新  browser.close()关闭当前窗口
print(browser.title)    #获取页面title
print(browser.current_url) #获取URL
time.sleep(2)
#移动到滚动条底部
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(3)
browser.quit()             #多个窗口关闭且退出浏览器

四、对象操作测试

html文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>元素状态</title>
		<style type='text/css'>
			* {
				margin: 0;
				padding: 0;
			}
			html,
			body{
				background-color: #eee;
			}
			.contain {
				margin: 50px;
			}
			.sect {
				margin: 100px;
			}
		</style>
	</head>
	<body>
		<div class='contain'>
			<div class='sect'>
				<!--内容显示-->
				<h4 class='show-text'>内容显示</h4>
				<!--内容不显示-->
				<h4 class='hidden-text' style='display:none'>内容不显示</h4>
			</div>
			<div class='sect'>
				<!--输入匡可编辑状态-->
				<input class='enabled-text' type='text'>
                <!--输入匡不可编辑状态-->
				<input class='disabled-text' type='text' disabled='disabled'>
			</div>
			<div class='sect'>
				<!--元素选中-->
				<form id='language'>
       				元素被选中?<br/>
		            <!---选中--->
					<div><input name='python' type='checkbox' checked='checked' />python</div>
					<!---未选中--->
					<div><input name='C++' type='checkbox'/>C++</div>
				</form>
			</div>
		</div>
	</body>
</html>

测试code

#对象操作
from selenium.webdriver.chrome.options import Options
options=Options()
options.add_experimental_option('w3c', [False])
browser = webdriver.Chrome(options=options) # 创建Chrome浏览器对象
browser.get('file:///E:/t1.html') # 加载指定的页面
browser.implicitly_wait(3)
#is_displayed 对象的显示状态
show_text=browser.find_element(By.CLASS_NAME,"show-text").is_displayed() #True
print(show_text)
hidden_text=browser.find_element(By.CLASS_NAME,'hidden-text').is_displayed() #False
print(hidden_text)
#is_enabled  对象编辑状态
print(browser.find_element(By.CLASS_NAME,"enabled-text").is_enabled()) #True
print(browser.find_element(By.CLASS_NAME,'disabled-text').is_enabled()) #False
#对象的选择状态
print(browser.find_element(By.NAME,"python").is_selected()) #True
print(browser.find_element(By.NAME,'C++').is_selected())  #False
time.sleep(3)
browser.quit()                     #关闭结束进程

测试结果

五、键盘鼠标操作测试

html文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>键盘模拟操作</title>
		<style type='text/css'>
			* {
				margin: 0;
				padding: 0;
			}
			html,
			body{
				background-color: #eee;
			}
			.contain {
				margin: 50px;
			}
			.sect {
				margin: 100px;
			}
			.input {
				font-size: 14px;
				padding: 2px 5px;
				color: #333;
			}
		</style>
	</head>
	<body>
		<div class='sect'>
			<h6> Ctrl+C 输入匡</h6>
			<input class="ctrl-c" type="text" value="键盘模拟操作">
		</div>
		<div class='sect'>
			<h6> Ctrl+V 输入匡</h6>
			<input class="ctrl-v" type="text">
		</div>
	</body>
</html>

测试脚本

#键盘操作
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/t2.html') # 加载指定的页面
time.sleep(1)
# ctrl+A 全选 Keys.CONTROL,'a'   剪切Keys.CONTROL,'x'
browser.find_element(By.CLASS_NAME,'ctrl-c').send_keys(Keys.CONTROL,'a') 
time.sleep(2)
# ctrl+C 复制  Keys.SPACE 空格 Keys.BACK_SPACE 退格  Keys.DELETE删除  
browser.find_element(By.CLASS_NAME,'ctrl-c').send_keys(Keys.CONTROL,'c')
time.sleep(2)
#ctrl+v粘贴 Keys.F5 刷新
browser.find_element(By.CLASS_NAME,'ctrl-v').send_keys(Keys.CONTROL,'v')
time.sleep(2)
#鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/t.html') # 加载指定的页面
element=browser.find_element(By.ID,'btn-login') #定位需要右击的元素
ActionChains(browser).context_click(element).perform() #右击操作
time.sleep(2)
#左键双击和右键类似,ActionChains(browser).double_click(element).perform()
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
element=browser.find_element(By.ID,'s-usersetting-top')
#鼠标悬停
ActionChains(browser).move_to_element(element).perform()
#鼠标拖放(src,tag两个不同定位对象) ActionChains(browser).drag_and_drop(src,tag).perform()
#单机鼠标左键不放 ActionChains(browser).click_and_hold(element).perform()
# move_to_wit_offset(element,20,10) 移动到元素具体位置处
# release(element) 释放鼠标
time.sleep(2)
browser.quit()                     #关闭结束进程

测试结果

六、下拉框操作测试

html文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>下拉匡处理</title>
		<style type='text/css'>
			* {
				margin: 0;
				padding: 0;
			}
			html,
			body{
				background-color: #eee;
			}
			select,label {
				display: block;
				margin: 20px 50px;
				width: 150px;
				height: 30px;
				font-size: 20px;
			}
		</style>
	</head>
	<body>
		<label>下拉框处理</label>
		<select name='language'>
			<option value=""></option>
			<option value="html">Html</option>
			<option value="css">CSS</option>
			<option value="C++">C++</option>
			<option value="PHP">PHP</option>
		</select>
	</body>
</html>

测试脚本

#下拉框操作
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/t3.html') # 加载指定的页面
browser.implicitly_wait(10)
sel=browser.find_element(By.NAME,'language') #定位下拉框
Select(sel).select_by_index('2')   #索引选择
time.sleep(2)
Select(sel).select_by_visible_text('PHP') #文本选择
for i in Select(sel).options:  #options() 返回所有选择项
    print(i.text)
for i in Select(sel).all_selected_options:  #已选择的 PHP
    print(i.text,sep=' select ')
print(Select(sel).first_selected_option.text) #第一个选择项PHP
time.sleep(2)
browser.quit()

测试效果

七、特殊Dom结构及下载测试

html文件

<!DOCTYPE html>
<html lang='en'>
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>特殊Dom结构</title>
		<style type='text/css'>
			* {
				margin: 0;
				padding: 0;
			}
			html,
			body{
				background-color: #eee;
			}
			#windows,#noWindows {
			    margin: 20px 50px;
				width: 500px;
				height: 100px;
			}
			#windows input, #noWindows input {
				font-size: 20px;
			}
			#alertWindows {
				position: relative;
				background: #C9D5E1;
				width: 60%;
				height: 80%;
				border-radius:5px;
				margin: 3% 27%;
			}
			#header span {
				line-height: 80px;
				padding: 15px;
			}
			#header-right {
				position: absolute;
				width: 25px;
				height: 25px;
				right: 5px;
				top: 5px;
				text-align: center;
				font-size: 22px;
				cursor: pointer;
			}
			#wp {
				margin: 30px;
			}
			#wp input {
				border: solid 1px #333;
			}
		</style>
	</head>
	<body>
	<!---windows 弹窗--->
		<div id='windows'>
			<h5>windows 弹窗</h5>
			<input type='button' onclick='windowsFunction()' value='windows 弹窗'/>
			<script>
			function windowsFunction(){
				alert('你好,这是window弹窗');
			}
			</script>
		</div>
		<div id='noWindows'>
			<h5>非 windows 弹窗</h5>
			<input type='button' onclick='noWindowsFunction()' value='非 windows 弹窗'>
			<div id='alertWindows'>
				<div id='header'>
					<span>你好这里是非window弹窗</span>
					<div id='header-right' onclick='hidder()'>x</div>
				</div>
			</div>
			<script type='text/javascript'>
				document.getElementByID('alertWindows').style.display='none';
				funtion noWindowsFunction(){
				document.getElementByID('alertWindows').style.display='';
			}
			function hidder() {
				document.getElementByID('alertWindows').style.display='none';
			}
			</script>
		</div>
		<script>
			function UploadFile() {
				var fileobj=document.getElementByID('fileupload');
				fileobj.click();
			}
			function changeFile() {
				var fileobj=document.getElementByID('fileupload');
				var filevale=fileobj.value;
				var filepath=document.getElementByID('filepath')
				filepath.innerHTML='上传的文件是: '+filevale
			}
		</script>
		<div id='wp1'>
			<h5>send_keys 文件上传</h5>
			<input id='uploadFile' type='file' />
		</div>
		<div id='wp2'>
			<form>
				<h5>使用第三方工具 文件上传</h5>
				<input id='fileupload' type='file' style='display:none' onchange='changeFile()' />
				<input id='fileupload-btn' type='button' onclick='UploadFile()' value='上传文件'/>
				<p id='filepath'></p>
			</form>
		</div>
	</body>
</html>

测试脚本

#弹窗和非弹窗
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('file:///E:/tdom.html') # 加载指定的页面
browser.implicitly_wait(2)
browser.find_element(By.ID,'windows').find_element(By.TAG_NAME,'input').click()
time.sleep(2)
WebDriverWait(browser,20).until(EC.alert_is_present()) #等待弹窗显示
alert=browser.switch_to.alert
print(alert.text)
alert.accept()
browser.find_element(By.ID,'noWindows').find_element(By.TAG_NAME,'input').click()
time.sleep(1)
browser.find_element(By.ID,'header-right').click()
time.sleep(2)
browser.find_element(By.ID,'uploadFile').send_keys('E:\\newlife\\Python-100-Days\\Day61-65\\code\\webtes.py')
# browser.find_element(By.ID,'fileupload-btn').click()
# os.system(r'E:\\upLoadFile.exe') #第三方工具
time.sleep(4)
browser.quit()

结果展示

 八、cookie与屏幕裁图

测试脚本

from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome() # 创建Chrome浏览器对象
browser.get('https://blog.csdn.net/dingyahui123') # 加载指定的页面
browser.implicitly_wait(10)
cockie=browser.get_cookies() #以字典形式返回cookie所有信息
#get_cookie(name) 返回cookie字典中key 为name的值
#add_cookie(cookie_dict) 手东添加cookie 需要有name 和value
#delete_cookie(name) 删除cokie字典中key为name的值
#delete_all_cookie() 删除所有
print(cockie)
#屏幕裁图
# browser.save_screenshot() #获取当前窗口屏幕裁图以png文件格式存储
# browser.get_screenshot_as_base64() #以base64字符串形式
# browser.get_screenshot_as_file()  #获取当前屏幕使用完成路径
# browser.get_screenshot_as_png() #二进制数据形式获取当前窗口屏幕裁图
try:
    browser.find_element(By.ID,'idt')
except NoSuchElementException: #找不到就裁图,常用日志截取
    browser.save_screenshot('./screen.png')

标签:web,time,element,sleep,测试,自动化,find,browser
From: https://blog.csdn.net/dingyahui123/article/details/144734222

相关文章

  • 国标GB28181视频平台EasyCVR安防知识:监控系统升级后,如何进行系统测试和验证?
    在当今这个信息化快速发展的时代,监控系统的升级不仅是技术进步的需要,也是适应日益增长的业务需求和安全挑战的必要措施。升级后的监控系统需要经过严格的测试和验证,以确保其能够满足新的性能标准和业务要求。以下是对监控系统升级后进行测试和验证的详细步骤,以确保系统的可靠性和......
  • 通过 PowerShell,你可以实现强大的安全监控和自动化响应。结合进程、模块、驱动程序、
    在PowerShell中,通过收集进程、模块和驱动程序信息,可以获取有关系统状态、潜在安全问题、恶意活动的指示等数据。这类信息对于安全防护、漏洞分析和系统审计非常重要。下面,我将详细说明如何通过PowerShell来收集这些数据,并加以分析。1. 收集进程信息进程是操作系统中运行的......
  • PowerShell 提供了多种强大且灵活的方式来进行外发数据传输。无论是通过 HTTP 请求、F
    在WindowsPowerShell中,"数据传输外发"(或类似的表述,可能是“外发数据传输”)并没有明确的、标准的技术术语。不过,这可能指的是数据的外发传输(outbounddatatransfer),即从本地计算机传送到外部服务器或其他系统的过程。在PowerShell中,数据传输通常通过不同的网络通信协议来进行......
  • 13、【ubuntu】【gitlab】【gtest】流水线添加第一个测试任务
    背景基于之前wiki【gitlab搭建第一个流水线】https://blog.csdn.net/nobigdeal00/article/details/144623993将在build阶段添加构建任务,并在test阶段添加一个测试任务demo是一个C项目,这里选用googletest作为测试框架,googletest主要是为C++设计的,C和C++同属一脉,也可以用来......
  • asp.net core webapi 向前端返回一个文件
    后端接口返回文件[Authorization]//给下载模版添加权限[HttpGet]publicIActionResultDownloadTemplate(){//AppContext.BaseDirectory用于获取项目根目录varfilePath=$"{AppContext.BaseDirectory}/MyStaticFiles/取货模板.csv";if(!System.IO.File.E......
  • 如何确定测试计划
    1、执行策略针对抽取出的性能测试点,在测试执行上通常会采取先进行单场景测试,然后组合场景测试,最后为整个产品建立测试模型,进行整体性能评估。也可设置benchark基准点,持续跟进产品基准变化趋势,预示产品风险。2、什么是场景?有必要先介绍下场景的概念,场景是应用运行时的一个剖面,一般......
  • 智能驾驶HIL仿真测试解决方案
    概述    智能驾驶HIL(HardwareintheLoop)仿真测试验证作为智能驾驶系统开发流程中非常重要的一个环节,可解决智能驾驶系统在测试过程中实车测试效率低、部分工况危险性高、实车测试成本高、难以实现回归测试和部分场景难以实现等问题。    经纬恒润推出的新一代自......
  • Linux基础篇、学习习题测试_01
    Linux基础篇欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!                                                    ———laowang题目一1.网络配置使......
  • Linux基础篇、学习习题测试_01答案
    Linux基础篇欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神!                                                                                 ————......
  • FluentAssertions:C#单元测试断言库,让测试代码更加直观、易读!
    推荐一个C#开源库,用于单元测试中的断言,它提供了一系列的扩展方法,使得单元测试的断言看起来更加自然流畅。01项目简介FluentAssertions是一个基于.NET的断言库,它提供了一种链式调用的方式来编写断言语句。支持框架.NETFramework4.7、.NETCore2.1、.NETCore3.0、.NET6......