UI自动化测试,并不是测试页面UI,而是跑页面功能
使用selenium的优点
1、工具免费
2、安装简单,小巧,selenium其实就是一个包
3、支持多语言(java,python)+selenium完成自动化测试
4、支持多平台(window,linux)
5、支持多浏览器 (ie,firefox,chrome)
selenium 原理:通过selenium中的webdriver以及浏览器驱动去驱动浏览器和
捕捉页面元素进行操作元素,从而达到模拟人工操作的效果
UI自动化的优点?
1.解决重复性功能测试和验证
2.减少冒烟测试,回归测试的人力成本,节省时间提高测试效率
3.减少测试人员在回归测试时用例漏测和验证点的漏测
什么样项目适合做自动化测试?
1.项目周期较长
2.项目版本稳定
自动化测试一般在什么阶段开始实施:
1.自动化脚本在什么阶段输出
产品验收通过或者项目版本上线后
2.脚本执行在什么阶段开始执行
冒烟测试--覆盖原有功能
回归阶段--包括bug验证上线
自动化如何进行开展工作:
1.熟悉业务需求,筛选出需要实现自动化测试的业务需求
2.筛选出业务需求的自动化场景,及找出这些场景的功能测试用例
3.选取自动化测试工具(selenium/robotframework)
3.1根据当前团队成员熟悉程度
3.2选取主流的
4.自动化测试框架设计搭建
5.自动化测试用例的输出及执行和维护
为什么要实现窗口最大化?
答:为了元素定位的时候更加准确,
防止元素折叠导致元素定位不到代码出现异常
#1.id定位
#driver.find_element_by_id("kw").send_keys('python')
# a = driver.find_element_by_id("kw")
# a.send_keys("python")
#2.name定位
#driver.find_element_by_name("wd").send_keys("武汉张三")
#3.class定位方法
#driver.find_element_by_class_name("s_ipt").send_keys("linux")
#4.css定位(#表示id,.表示class)
#driver.find_element_by_css_selector('.s_ipt').send_keys("武汉张三")
#5.xpath定位方法
#xpath绝对路径写法
#driver.find_element_by_xpath('html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys("武汉张三")
#xpath相对路径写法(两个"//"表示相对路径,*通配符匹配任意的标签名)
#driver.find_element_by_xpath('//*[@id="kw"]').send_keys('武汉张三')
#xpath 层级定位/父级定位(/表示上下级关系)
#driver.find_element_by_xpath('//*[@id="form"]/span[1]/input').send_keys("武汉张三")
#6.link_text定位方法,用于定位链接文本
#driver.find_element_by_link_text("hao123").click()
#7.partial_link_text 定位部分链接文本(连续部分)
#driver.find_element_by_partial_link_text('123').click()
#8.tag_name 标签名定位方法
# s =driver.find_elements_by_tag_name("input")#定位所有的input标签
# for i in s:
# if i.get_attribute('id')=='kw':#当i这个id属性的值为kw
# i.send_keys('张三')
#9.javascript定位
js ="document.getElementById('kw').value='selenium'"
driver.execute_script(js)#通过execute_script执行js脚本
id定位 尽可能使用,第一选择
name定位 第二选择
class 定位 第三选择
link_text定位
partial_link_text定位
xpath定位 第四选择
tag_name定位
javascript定位
css定位 第五选择
# from selenium import webdriver
# import time
# import random
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")
# driver.maximize_window()
# time.sleep(3)
# driver.find_element_by_name("username").send_keys('admin')#输入账号
# time.sleep(2)
# driver.find_element_by_name('password').send_keys('123456')#输入密码
# #定位性别单选框
# driver.find_element_by_css_selector('#girl').click()#点击女士
# time.sleep(2)
# driver.find_element_by_css_selector('#boy').click()#点击男士
# #多选框
# # driver.find_element_by_id('p').click()
# # driver.find_element_by_id('j').click()
# # driver.find_element_by_id('h').click()
# # driver.find_element_by_id('g').click()
# # time.sleep(3)
# checkbox=driver.find_elements_by_name('subject')
# for i in range(3):
# inx = random.randint(0,len(checkbox)-1)
# box = checkbox.pop(inx)
# box.click()
# time.sleep(1)
# #下拉框定位
# select=driver.find_element_by_id("school")#定位下拉框
# time.sleep(2)
# select.find_element_by_css_selector('[value="sh"]').click()#根据下拉框value值进行定位并点击选择上海校区
# time.sleep(2)
# select.find_element_by_css_selector('[value="tj"]').click()#根据下拉框value值进行定位并点击选择天津校区
#
#上传文件
# fi = r'D:htmldebug.log'#需要上传的文件
# a =driver.find_element_by_xpath('/html/body/form/table/tbody/tr[8]/td[2]/p/input')#上传按钮
# a.send_keys(fi)
#alert弹窗处理
# driver.find_element_by_name('name').click()
# text= driver.switch_to.alert.text#获取弹窗文本
# print(text)#打印文本
# time.sleep(1)
# #driver.switch_to.alert.accept()#点击弹窗确定按钮
# driver.switch_to.alert.dismiss()#点击弹窗取消按钮
# driver.set_window_size(1000,600)#设置窗口大小
# size1=driver.get_window_size()#获取设置后的窗口大小
# print(size1) #{'height': 600, 'width': 1000}
# time.sleep(1)
# #driver.close()
# driver.quit()
#window.scrollTo页面滑动
# js='window.scrollTo(0,1000)'#设定从顶部0的位置滑到1000位置
# driver.execute_script(js)#执行脚本,开始下滑
# time.sleep(3)#强制等待
# js1='window.scrollTo(0,0)'#返回顶部
# driver.execute_script(js1)#执行脚本
# time.sleep(2)#强制等待
# driver.close()#退出
#keys类:作用就是模拟鼠标键盘的快捷操作
# from selenium import webdriver
# import time
# from selenium.webdriver.common.keys import Keys
# import random
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")
# driver.maximize_window()
# time.sleep(3)
# driver.find_element_by_id('kw').send_keys('武汉张三')
# driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')#全选
# driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')#剪切
# #driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v')#粘贴
# driver.find_element_by_id('kw').send_keys(Keys.ENTER)#回车
# def ke_ys(a,b):
# return driver.find_element_by_id(a).send_keys(b)
# if __name__ == '__main__':
# ke_ys('kw','武汉张三')#先输入
# ke_ys('kw',(Keys.ENTER))
#悬停
# from selenium import webdriver
# import time
# from selenium.webdriver.common.action_chains import ActionChains
# import random
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")
# driver.maximize_window()
# time.sleep(3)
# driver.find_element_by_id('s-usersetting-top').click()#点击设置功能
# driver.find_element_by_class_name('setpref').click()#点击搜索设置功能
# time.sleep(2)
# driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()#点击保存设置
# time.sleep(2)
# driver.switch_to.alert.accept()#点击弹窗确定按钮
# driver.quit()
#三种等待方式
# #1.sleep(秒数) :强制等待
# 2.implicitly_wait(秒数): 隐式等待
# 等待页面所有的元素加载完成,则会自动进行下一步操作,如果等待时间超过设置的时间则会报错
# 3.WebDriveWait:显示等待
#等待页面特定的某一个元素加载后,才会进行下一步操作,如果设定的时间内没有找到则报错
#get_screenshot_as_file 截图
# from selenium import webdriver
# import time
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")
# driver.maximize_window()
# driver.implicitly_wait(10)
# driver.find_element_by_id('kw').send_keys("武汉")
# driver.find_element_by_id('su').click()
# path =r'D:htmlbaidu.png'#把图片保存到该路径下
# driver.get_screenshot_as_file(path)#把当前页面进行截图
# driver.close()
#窗口刷新、返回
# from selenium import webdriver
# import time
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")
# driver.maximize_window()#窗口最大化
# driver.implicitly_wait(10)
# driver.refresh()#刷新窗口
# time.sleep(2)
# driver.find_element_by_id('kw').send_keys('武汉')
# driver.find_element_by_id('su').click()
# time.sleep(3)
# driver.back()#返回上一级
# time.sleep(2)
# #每一条用例执行完毕后需要加上一个:关闭浏览器
# driver.close()
#句柄
# from selenium import webdriver
# import time
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")#百度
# driver.maximize_window()#窗口最大化
# time.sleep(2)
# ##driver.get("http://www.jd.com")#京东
#注意:在一个案例中不要通过get打开多个窗口,因为只能显示最后的窗口,
#前面的窗口会被后面进行覆盖;
# jd="window.open('http://www.jd.com')"
# driver.execute_script(jd)
# #如果要实现打开多个网址,需要使用window.open打开
# driver.implicitly_wait(10)
# #在京东输入框输入商品
# #driver.find_element_by_id('key').send_keys('手机')
# # title= driver.title#获取当前窗口的标题
# # print(title)#百度一下,你就知道
# #切换窗口
# head=driver.current_window_handle#获取当前的单个句柄
# print(head)
# heads=driver.window_handles#获取已知窗口的所有句柄
# # print(heads)#返回是一个列表
# #通过句柄切换窗口
# driver.switch_to.window(heads[1])
# # title1= driver.title
# # print(title1)
# driver.find_element_by_id('key').send_keys('手机')
#用刚刚讲的句柄来完成 如何判断是在百度切换到jd窗口
# from selenium import webdriver
# import time
# driver= webdriver.Chrome()
# driver.get("https://www.baidu.com")#百度
# driver.maximize_window()#窗口最大化
# time.sleep(2)
# jd="window.open('http://www.jd.com')"
# driver.execute_script(jd)
# driver.implicitly_wait(10)
# he=driver.current_window_handle#获取当前的句柄
# heads= driver.window_handles#获取所有的句柄
# for i in heads:
# if i !=he:
# driver.switch_to.window(i)
# tit= driver.title#获取窗口标题
# print(tit)
#iframe定位
from selenium import webdriver
import time
driver= webdriver.Chrome()
driver.get("https://www.jd.com")#京东
driver.maximize_window()#窗口最大化
driver.implicitly_wait(10)
driver.find_element_by_link_text("你好,请登录").click()
time.sleep(2)
driver.find_element_by_class_name('QQ-icon').click()
time.sleep(2)
# driver.find_element_by_id('img_out_382002847').click()
#第一种方法
#driver.switch_to.frame('ptlogin_iframe')#进入到iframe
#第二种方法
fi=driver.find_element_by_css_selector('[frameborder="0"]')
driver.switch_to.frame(fi)
time.sleep(2)
driver.find_element_by_id('img_out_382002847').click()
time.sleep(2)
driver.switch_to.default_content()#取消所有的frame,跳回最外面
driver.switch_to.parent_frame()#取消当前的frame,只跳出一层
driver.find_element_by_id('key').send_keys('手机')
driver.close()



