目录
目录
一、环境准备
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