1.什么是自动化
使用测试工具 或者其他手段对软件进行测试
2.自动化测试好处
1.缩短测试周期 2.避免人为出错 3.测试信息存储 4.轻易获取覆盖率 5.实现自动或者定时执行
3.使用自动化的前提条件
1)手动测试已经完成,后期再不影响进度的前提下逐渐实现自动化
2)项目周期长,重复性的工作都交给机器去实现
3)需求稳定,项目变动不大
4)自动化测试脚本复杂度比较低
5)可重复利用
4.使用自动化测试的场景
1)频繁的回归测试
2)冒烟测试
3)传统行业需求变化不大,应用频繁
4)性能测试
5.常用工具
QTP、Selenium、RFT
6.为什么要学习元素定位
1)计算机没有智能到人的程度。
2)计算机不能像手动测试人员一样通过眼看,手操作鼠标点击,操作键盘输入。
3)计算机通过一系列计数手段找到元素(按钮、输入框、模拟键盘等)
7.元素定位的工具或手段有哪些
css选择器、xpath
8.环境搭建
1. 下载浏览器插件
2. 菜单 → 添加附件 → 设置图标 → 从文件中添加附件
9.什么是xpath
XPath即为XML路径语言,它是一种用来(标准通用标记语言的子集)在 HTML\XML 文档中查找信息的语言
10.什么是xml
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
11.xml和html 的区别
html是用来显示数据、xml是用来传输和存储数据
12.获取元素
①/:从根节点选取 #/html/head/meta[1]第一个;[last()]最后一个元素;[last()-1]倒数第二个元素; [position()<3] 前两个元素
②//:从匹配选择的当前节点选择文档中的节点 #//link
③.选取当前节点
④..选取当前节点的父节点
⑤@:选取属性 #//meta[@name] 或者//meta[@name="referrer"]
⑥//meta[@*]:所有带有属性的meta元素
⑦//head/meta | //head/title:选取head元素的所有meta元素和title元素
⑧//meta | //title:选取文档中的所有title和meta元素
13.css选择器
13.1什么是css选择器
CSS 中,选择器是一种模式,用于选择需要添加样式的元素
13.2css选择器语法
①.info: 选择class=“info”的所有元素
②#name: 选择id=“name”的所有元素
③* :选择所有的元素
④元素1,元素2: 选择元素1和元素2的所有元素
⑤元素1 元素2: 选择元素1内部的所有元素2的元素
⑥元素1>元素2: 选择父元素为元素1的元素的所有元素2的元素
⑦[target]: 选择带有target属性的所有元素
⑧[target=blank]: 选择target="blank"的所有元素
Web自动化测试进阶
什么是框架框架(framework)是一个框子 -- 指其约束性,也是一个架子 -- 指其支撑性,是一个基本概念上的结构,用于去解决或者处理复杂的问题。
为什么使用框架1)自己从头实现太复杂
2)使用框架能够更专注于业务逻辑,加快开发速度
3)框架的使用能够处理更多细节问题
4)使用人数多,稳定性,扩展性好
selenium工作原理
4.selenium对浏览器操作
1)库的导入
from selenium import webdriver
2)创建浏览器对象
必须为大写
driver = webdriver.Firefox()
driver = webdriver.Chrome()
3)浏览器尺寸相关操作
maximize_window() 最大化
get_window_size() 获取浏览器尺寸,打印查看
set_window_size() 设置浏览器尺寸,400*400
4)浏览器位置相关操作
get_window_position() 获取浏览器位置
set_window_position(x,y) 设置浏览器位置
5)浏览器的关闭操作
close()关闭当前标签/窗口
quit()关闭所有标签/窗口
6)页面请求操作
driver.get(url)请求某个url对应的响应
refresh()刷新页面操作
back()回退到之前的页面
forward()前进到之后的页面
fromselenium import webdriver
import time
driver = webdriver.Chrome()#不可以找到,必须导入对应的驱动器
driver=webdriver.Firefox()
url1="http://www.baidu.com"
url2="https://zhuanlan.zhihu.com/"
请求第一个接口
driver.get(url1)
time.sleep(3)
刷新
driver.refresh()
driver.get(url2)
回退
driver.back()time.sleep(3)
前进driver.forward()
time.sleep(3)
driver.close()
5.selenium获取断言信息1)什么是断言
断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
2)获取断言信息的操作
current_url 获取当前访问页面url
title 获取当前浏览器标题
page_source 获取网页源码
print(driver.current_url)
print(driver.title)
print(driver.page_source)
截图:
get_screenshot_as_png() 保存图片
data=driver.get_screenshot_as_png()
withopen("a.png","wb")asf:
f.write(data)
get_screenshot_as_file(file) 直接保存
driver.get_screenshot_as_file("b.png")
6.selenium八大元素定位from selenium import webdriver
driver=webdriver.Firefox()
url = "http://www.baidu.com"
driver.get(url)
第一种 id
ele = driver.find_element_by_id("kw")
ele.send_keys(12306) # 输入数据
from selenium.webdriver.common.by import By
ele = driver.find_element(By.ID,"kw")# ele.send_keys(12306) # 输入数据
第二种 标签名字
ele = driver.find_element_by_name("wd")
ele.send_keys(12306) # 输入数据
第三种 class
ele = driver.find_element_by_class_name("s_ipt")
ele.send_keys(12306) # 输入数据
第四种 Xpath
ele = driver.find_element_by_xpath("//*[@id='kw']")
ele.send_keys(12306) # 输入数据
第五种 css class
ele = driver.find_element_by_css_selector("#kw")
ele.send_keys(12306) # 输入数据
第六种 text
ele = driver.find_element_by_link_text("地图")
ele.click() # 输入数据
第七种:类似于模糊匹配
ele = driver.find_element_by_partial_link_text("地")
ele.click()
第八种:标签名定位,必须得保证只有一个这种名字的标签,使用下面这个搜索
url = "http://cn.bing.com/"
driver.get(url)# ele = driver.find_element_by_tag_name("input")
ele.send_keys(12306) # 输入数据
7.元素的操作对元素的相关操作,一般要先获取到元素,再调用相关方法
element = driver.find_element_by_xxx(value)
1)点击和输入
点击操作---------->element.click()
清空/输入操作:
element.clear()---------------------->清空输入框
element.send_keys(data)-------->输入数据
2)提交操作
element.submit()
8.多标签之间的切换场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。
1)获取所有窗口的句柄
handles = driver.window_handlers
调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。
2)通过窗口的句柄进入的窗口
driver.switch_to_window(handles[n])
driver.switch_to.window(handles[n])
通过窗口句柄激活进入某一窗口
案例:
58同城租房信息:http://bj.58.com
使用句柄driver.get("http://bj.58.com")
print("点击之前句柄:",driver.window_handles)
ele=driver.find_element_by_xpath(".//*[@id='fcNav']/em/a[1]")ele.click()
list_windowns=driver.window_handles
print("点击之后句柄:",driver.window_handles)
driver.switch_to.window(list_windowns[1])
eleDaxing=driver.find_element_by_link_text("大兴")
eleDaxing.click()
9.多表单
el = driver.find_element_by_xxx(value)
driver.switch_to.frame(el)/driver.switch_to_frame(el)
案例:
fromseleniumimportwebdriver
#打开游览器
driver=webdriver.Firefox()
#登录QQ
url="https://qzone.qq.com/"
driver.get(url)
#获取元素
#定位表单元素
ele_bd=driver.find_element_by_id("login_frame")
driver.switch_to.frame(ele_bd)
ele=driver.find_element_by_xpath(".//*[@id='switcher_plogin']")
ele.click()
#输入账号
ele2=driver.find_element_by_id("u")
ele2.send_keys()
#输入密码
ele3=driver.find_element_by_id("p")
ele3.send_keys("")
ele4=driver.find_element_by_id("login_button")
ele4.click()
弹出框操作
# 进入到弹出框中
driver.switch_to.alert
#接收警告
accept()
#解散警告
dismiss()
#发送文本到警告框
send_keys(data)
用法:driver.switch_to.alert.accept()
下拉框
案例:
fromseleniumimportwebdriver
importtime
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_id("s-usersetting-top")
ele.click()
ele1=driver.find_element_by_xpath(".//*[@id='s-user-setting-menu']/div/a[2]")
ele1.click()
time.sleep(2)
ele2=driver.find_element_by_xpath(".//*[@id='yadv-setting-gpc']/div/div[1]/i[1]")
ele2.click()
list_ele=driver.find_elements_by_class_name("c-select-item")
print(list_ele)
list_ele[2].click()
# for list_i in list_ele:
# print(list_i.text)
# if list_i.text =="最近一周":
# list_i.click()
鼠标和键盘操作
鼠标
1.先导入动作链类:
fromselenium.webdriverimportActionChains
ActionChains(driver)
2.常用鼠标动作:
ActionChains(driver).context_click(ele).perform()点击鼠标右键
ActionChains(driver).double_click(ele).perform()点击鼠标左键
ActionChains(driver).move_to_element(el).perform()鼠标悬停
3.perform()对前面的方法执行
#案例:
fromselenium.webdriverimportActionChains
fromseleniumimportwebdriver
importtime
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_xpath(".//*[@id='s-top-left']/div/a")
# ele.click()
ActionChains(driver).double_click(ele).perform()
键盘
1.导入
fromselenium.webdriver.common.keysimportKeys
2.常用键盘操作
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12
浏览器等待
1.为什么要进行等待
1.网速慢 2.网站内容过多 3.如果不进行等待而直接定位元素,可能会抛出异常
2.selenium中等待的分类
1.固定等待
2.显示等待
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(
(By.CLASS_NAME,"g-hu")))
3.隐式等待
driver.implicitly_wait(n)