自动化测试的优势:
节省时间,人力成本,提高我们测试效率 ,重复使用,
选取自动化测试脚本的因素:
1.
项目影响
:自动化能否让开发更敏捷
2.
复杂度
:自动化是否易于实现,包括数据与其他环境影响
3.
时间
:自动化实现的时间,编写脚本所消耗的时间
4.
维护编码工作量
,以及代码的稳定性能否合格,可维护性强
5.覆盖率:是否覆盖关键特性和功能
6.
资源利用率的问题
,是否花费大量时间
7.自动化的执行过程,能否有
足够的使用空间
8.
用于兼容性测试
(修改少量代码测试不同平台的兼容性)
自动化测试的产生:
自动化测试通过对人工操作,完成对被测系统的输出,并且对输入有校验功能
selenium
使用javascript语言编写
selenium用于验证浏览器页面的行为
安装selenium:在终端命令行输入pip install selenium 或者 pip3 install selenium
注意该selenium默认安装到python的安装目录/lib/site-packages中
配置浏览器驱动程序,将firefox浏览器驱动器复制到python安装目录下
运行脚本,查看浏览器是否能正常打开
from selenium import webdriver
dr = webdriver.Firefox()
dr.get("https://www.baidu.com")
1.selenium IDE,
一个类似qtp脚本录制火狐插件
2.在Firefox浏览器的【扩展和主题】菜单中打开,搜索Selenium IDE。找到后,选择【添加到Firefox】。
webdriver基础
1.连接和沟通浏览器
from selenium import webdriver
定义一个浏览器对象
driver=webdriver.Firefox()
需要拥有 与浏览器匹配的驱动程序
selenium支持适配的浏览器,ie Firefox,chrome,safi,edge
2.浏览器地址的应用
创建浏览器对象后,使用get()方法打开浏览器。get(需要一个url地址变量)
url=“https:/wwwbaidu.com”
driver.get(url)
3.识别页面中的元素
浏览器终端ctrl+f查询元素出现的次数
打开网页查找网页元素。
右键元素点击检查,查看元素控件
其中class name是HTML标签的class属性
driver.find_elements_by_id("")
tag name是HTML中的标签名(加《标签名》)
link test是一个标签(链接文本)的文本内容
`<a href=””>链接文本</a>`
xpath是HTML文档路径,页面信息的详细具体路径,区分相对绝对路径
一次定位一个元素:
`driver.foud_element(by.属性,"属性名")`
webdriver常用的操作方式
鼠标事件
需要先导入包:
from selenium.webdriver.common.action_chains import ActionChains
键盘事件
from selenium.webdriver.common.keys import Keys
find_element(By.ID,"id名字")send_keys(Key.CONTROL,“x”)
基本操作:
clear()
:主要针对文本框
click()
:主要针对文本框,提交按钮,图片,超链接等点击内容
send_keys(
)输入文本内容。主要针对文本框
实战脚本:
"""
使用火狐浏览器
打开百度首页
输入 Selenium自动化测试
点击 百度 按钮
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
def test_open_baidu():
driver = webdriver.Firefox()
#打开网页
driver.get("http://www.baidu.com")
#定位页面元素,输入内容
#driver.find_element_by_id("kw").send_keys("Selenium自动化测试")
driver.find_element(By.ID,"kw").send_keys("Selenium自动化测试")
#定位元素,点击按钮
#driver.find_element_by_id("su").click()
driver.find_element(By.ID,"su").click()
#test_open_baidu()
'''
将搜索结果的内容和文本,直接输出
'''
def test_output_result():
driver = webdriver.Firefox()
#打开网页
driver.get("http://www.baidu.com")
#强制休眠 3
sleep(3)
#定位页面元素,输入内容
#driver.find_element_by_id("kw").send_keys("Selenium自动化测试")
driver.find_element(By.ID,"kw").send_keys("Selenium自动化测试")
sleep(3)
#定位元素,点击按钮
#driver.find_element_by_id("su").click()
driver.find_element(By.ID,"su").click()
sleep(10)
#定位搜索结果,并输出
res = driver.find_element(By.XPATH,"/html/body/div[2]/div[4]/div[1]/div[2]/div/div/div/div[2]/span").text
print(res)
#test_output_result()
"""
获取页面中所有超链接的链接地址
"""
def test_output_linkurl():
driver = webdriver.Firefox()
#打开网页
driver.get("http://www.baidu.com")
#强制休眠 3
sleep(3)
#定位所有超链接,获取链接属性
a_list = driver.find_elements(By.TAG_NAME,"a")#结果是一个列表
for a in a_list:
print(a.text,a.get_attribute("href"))
test_output_linkurl()
脚本元素报错:没有找到页面元素解决方式
1)更换元素的定位方式
2)在元素添加休眠时间,导入time包
from time import sleep
强制休眠sleep(3)
5.控制浏览器的操作
from selenium import webdriver
driver=webdriver.Firefox()
driver.set_window_size(180,800)
driver.quit()
2.窗口的前进,后退,刷新(涉及到窗口切换)
前进
driver.forward()
后退
driver.back()
刷新
driver.refresh()
获取验证信息:
断言:
浏览器信息验证:
浏览器对象.title
浏览器对象.current_url 浏览器的当前地址
浏览器对象.page_source 浏览器的页面代码
c 记录浏览器页面
页面元素.screenshot(图片名称和地址) 给元素截图
浏览器对象.get_screenshot_as_file(图片名称和地址) 给窗口截图 图片类型为png格式
.网页弹窗,框架的处理
警告框处理:alert confirm prompt
具体做法:switch_to.alert.accept()
7多框架切换
框架处理:针对frame 和 iframe框架
进入框架:浏览器对象
浏览器对象.switch_to.frame(id或者name,tag_name,xpath)
8.验证和纪录页面行为
验证元素的属性和特性:
size:可以获取元素的宽高属性
test:可以获取元素的文本属性
文件上传
8. 窗口截图
9.浏览器的关闭
close()关闭单个窗口
quit()关闭所有窗口
10.处理下拉列表
from selenium.webdriver.support.ui import Select
def test_select():
dr = webdriver.Firefox()
dr.get("file:///D:/testSelenium/testselect.html")
sleep(2)
#处理select标签
#定位select标签
pro = dr.find_element(By.ID,"pro")#定位标签
# 通过select类将标签转化为selenium可以识别的Select
# 转化完成后,选择
Select(pro).select_by_value("河南省")#通过option的value属性查找和操作选项
sleep(3)
Select(pro).select_by_index(1)# 通过option在select中的位置下标选择选项
sleep(3)
Select(pro).select_by_visible_text("四川省")# 通过option标签对之间的文本信息进行选择
浏览器打开多窗口的验证
#浏览器打开多个窗口的验证
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
def test_windows():
dr = webdriver.Firefox()
# 打开地址
dr.get("https://www.baidu.com")
sleep(5)
#输出当前浏览器页面标题
print(dr.title)
#输出浏览器的句柄
print(dr.current_window_handle)
# 点击新闻超链接
dr.find_element(By.LINK_TEXT,"新闻").click()
sleep(5)
#再次打印页面标题
print(dr.title)
print(dr.current_window_handle)
#打印输出所有的浏览器窗口句柄信息
print(dr.window_handles)
#浏览器多个窗口信息,会组成一个列表,每一个列表中的元素,都是窗口的句柄信息
#如果需要切换窗口,则选择对应的窗口句柄
dr.switch_to.window(dr.window_handles[1])
sleep(2)
# 新闻页面搜索
dr.find_element(By.ID,"ww").send_keys("俄罗斯和乌克兰的冲突")
sleep(2)
dr.find_element(By.ID,"s_btn_wr").click()
sleep(5)
# 输出搜索结果页面的标题
print(dr.title)
# 关闭当前窗口
dr.close()
sleep(5)
# 退出浏览器
dr.quit()
test_windows()
实现对图片把内容的下载操作!
注意:
需要导入requests库
下拉滚动条!
可以用keys键盘事件滚动下拉框
获取cookie
利用cookie文件执行快捷登录操作
添加cookie前必须打开网页否则会报错
删除cookie文件