【文章末尾给大家留下了大量的福利】
一.web自动化入门
1.什么是web自动化测试/strong> 让程序代替人为自动验证web项目功能的过程 2.什么web项目适合做自动化测试 需求变动不频繁 项目周期长 需要回归测试 3.测试工具: web自动化测试:selenium app端自动化测试:Appium 接口自动化测试;jemeter,postman 性能测试:jemeter.loadrunner 4.selenium webdriver工作原理
二.WebDriver基础
1.搭建webdriver环境
3.Xpath.CSS定位 什么时候使用xpath,css id,class,name属性值为动态获取,随着刷新或加载而变化 3.1 Xpath定位策略 xpath定位方法 driver.find_element_by_xpath() 1.路径定位 绝对路径 相对路径 2.利用元素属性 3.层级与属性结合 4.属性与逻辑结合 路径(绝对路径,相对路径) 绝对路径:从最外层元素到指定元素之间所有经过元素层级路径 例如:/html/body/div/p[2] 提示:绝对路径从/开始 使用firebug可以快速生成,元素xpath绝对路径 相对路径:从第一个符合条件的元素开始(一般配合属性区分) 例如://input[@id=’kw’] 提示:相对路径以//开始 使用firebug拓展可以快速生成,元素相对路径 利用元素属性 说明:快速定位元素,利用元素唯一属性 实例://[@id=’userA’] 层级与属性结合 说明:要找的元素没有属性,但他的父级有 实例://[@id=’p1’]/input 属性与逻辑结合 说明:解决元素间相同属性重名问题 实例://[@id=’telA’ and @class=’telA’] Xpath延伸 //[text()=’xxx’] 文本内容是xxx的元素 //[starts-with(@attribute,’xxx’)] 属性以xxx开头的元素 //[contains(@attribute,’sxxx’)] 属性中含有xxx的元素
3.2 CSS定位 1.在selenium中极力推荐css定位,因为它比xpath定位速度要快 css定位方法 driver.find_element_by_css_selector() css定位常用策略 1.id选择器 2.class选择器 3.元素选择器 4.属性选择器 5.层级选择器 使用css的案例 通过类名,id,和标签名定位
层级选择器 说明:根据元素的父子关系来选择 格式:元素>元素,例如:P>input 返回所有p元素下的input元素 提示:> 可以用空格代替 例如 p input 元素之间的嵌套关系
通过属性
通过父子关系
元素状态
css总结
4.xpath和css类试功能对比
5.元素操作方法 1.clear() 清除文本 2.send_keys() 模拟输入 3.click() 单击元素 5.1webdriver操作浏览器常用方法 1.maxmize_window() 最大化 2.set_window_size(100,100) 浏览器大小,设置浏览器宽高(像素点) 3.set_window_position(300,200) 浏览器位置,设置浏览器位置 4.back() 后退 5.forward() 前进 6.refresh() 刷新 7.close() 关闭单个窗口 8.quit() 关闭所有webdriver启动窗口 5.2webdriver操作浏览器总结 最大化浏览器 driver.maxmize_window() 刷新 driver.refresh() 后退 driver.back() 前进 driver.forward() 设置浏览器大小 driver.set_window_size(300,200) 设置浏览器位置 driver.set_window_position(300,200) 关闭单个浏览器窗口 driver.close() 关闭所有浏览器 driver.quit()
6.webdriver的其他用法 1.size 返回元素大小 2.text 返回元素文本 3.title 获取页面title 4.current_url 获取当前页面url 5.is_display() 判断元素是否可见 6.is_enabled() 判断元素是否可用 7.get_attribute(’’xx’) 获取属性值 提示: 1.size,text.title,current_url:为属性,调用时无括 2.title,current_url:使用浏览器实例化对象直接调用,例如:driver.title 6.1webdriver其他常用方法总结: 获取文本框大小 size=driver.find_element_by_id(‘userA’).size print(‘size’:size) 获取a标签内容 text=driver.find_element_by_id(‘fwa’).text print(‘a标签text’:text) 获取title title=driver.title 获取当前页面url url=driver.current_url 获取a标签href属性值 href=driver.find_element_by_id(‘fwa’).get_attribute(‘href’) 判断span是否显示 display=driver.find_element_by_id_css_selector(‘span’).is_displayed() 判断取消按钮是否可用 enabled=driver.find_element_by_id(‘cancelA’).is_enabled()
三.中级API
包括:元素等等,警告框操作,下拉选择框,滚动条,切换frame表单,窗口截图,键盘鼠标操作 1.webdriver鼠标操作 说明:webdriver中将操作鼠标的方法封装在ActionChains类中 1.double_click() 双击 2.drag_and_drop() 拖动 3.move_to_element() 悬停 4.perform() 执行,用次方法执行以上所有鼠标方法 例如:注册页面A,在用户名文本框上点击鼠标双击 1.导包:from selenium.webdriver.common.action_chains import ActionChains 2.实例化ActionChains对象:action=ActionChains(driver) 3.调用双击方法:element=action.double_click(username) 4.执行:element.perform()
2.webdriver键盘操作 说明:webdriver中将操作键盘的方法封装在keys类中 导包:from selenium.webdriver.commom.keys import keys 2.1常用的键盘操作
- 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,’c’)复制(Ctrl+C)
3.元素等待 隐式等待调用方法 方法:implicitly_wait(秒),最大等待时长 调用:driver.implicitly_wait(10) 说明:如果定位某一元素失败,就会触发隐式等待有效时长,如果在指定时长内加载完毕则继续执行,否则抛出NosuchelementExcption异常,如果元素定位到了不会触发隐式等待
4.下拉选择框 说明:下拉框就是HTML中的select元素 4.1select类 select方法: 1.select_by_index() 根据option索引来定位,从0开始 2.select_by_value() 根据option属性 value值来定位 3.select_by_visible_text() 根据option显示文本来定位 4.2 select类实现方法 1.导包select类 from selenium.webdriver.support.select import Select 2.实例化select类 select=Select(driver) 3.调用方法:select.select_by_index(0) select.select_by_visible_text(‘上海’) select.select_by_value(‘cq’)select_by_value(‘cq’)
5.警告框处理 说明:webdriver对警告框的操作,有专门的处理方法 提示:html中常用对话框有三种,处理方法都一样 1.alert 2.confirm 3.prompt 5.1 警告框处理方法 1.text 返回文字信息 2.accept() 接受对话框选项 3.dismiss() 取消对话框选项 5.2 调用方法 1.获取警告框 alert=driver.switch_to.alert 2.调用 alert.text alert.accept() alert.dismiss() 5.3处理警告框总结 定位alert按钮 alert=driver.find_element_by_id(‘alert’).click() 获取警告框 alert=driver.switch_to.alert 打印警告文本 print(alert.text) 接受警告栏 alert.accept() 取消警告栏 alert.dismiss()
6.滚动条操作 说明:调用JavaScript方法操作滚动条 为什么要学习滚动条: 在html页面中,由于前端技术框架原因,页面元素为动态显示,元素根据滚动条下拉而被加载 6.1需求分析实现 1.设置JavaScript脚本控制滚动条 js=’windos.scrollTo(0,100)’ 2.webdriver调用js脚本方法 driver.execute_script(js)
7.frame表单切换 说明:webdriver类库中封装了html页面中使用frame表单框架技术的方法 方法:driver.switch_to.frame(’’) 切换表单方法 driver.switch_to.default_content() 恢复默认页面方法 7.1操作原理 1.html中iframe标签提供了内联结构,使用内联结构可以在一个浏览器中显示多个页面 2.iframe标签是外层页面的标签,若想操作iframe框架内嵌的页面,需要先定位到iframe页面 3.通过switch_to.frame()切换到内层页面,在进行内层页面的操作 4.内层页面的操作和普通页面一致,元素定位,元素操作 7.2 frame表单切换 说明:在webdriver类库中封装了HTML页面中使用frame表单框架技术定位的方法 操作步骤: 1.定位到iframe标签 2.完成切换 若iframe具有id属性,直接使用id属性值切换进内层页面 driver.switch_to,.frame() 定位到iframe元素,再切换进入 element=driver.find_element_by_id(’’) driver.switch_to.frame(element)
8.多窗口 多窗口切换 说明:再webdriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法 句柄(handle,窗口的唯一标识码) 方法: driver.current_window_handle 获取当前窗口句柄 driver.window_handles 获取所有窗口句柄 driver.switch_to.window() 切换到指定句柄
9.窗口截图 方法:在同级目录下创建image文件夹 get_screenshot_as_file(’./image/01.png’) 截取当前窗口
10.验证码 说明:在web应用中,需要输入验证码 10.1 验证码处理方式: 去掉验证码 测试环境下 设置万能验证码 生产环境 记录cookie 10.2 记录cookie 方法: get_cookies() 获取本 站所有本地cookie get_cookie(name) 获取指定cookie add_cookie(str) 添加cookie str:为字典格式 {’ ’ : ’ ‘} 10.3实现步骤分析 1.登录百度,抓取(BAIDUID,BDUSS) 2.使用add_cookie()方法,添加(BAIDUID,BDUSS)键和值 3.调用刷新方法 driver.refresh() 10.4代码示例 from selenium import webdriver import time driver=webdriver.Firefox() driver.get(r’https://www.baidu.com’) driver.add_cookie({‘name’:’BAIDUID’,’value’:’根据实际填写’}) driver.add_cookie({‘name’:’BDUSS’,’value’:’根据实际填写’}) time.sleep(3) driver.refresh() time.sleep(3)
四.自动化测试框架
1.unitTest框架 专门用来执行代码测试的框架 为什么使用unittest框架 1.能够组织多个用例执行 2.提供丰富断言方式 3.提供丰富日志结果和测试结果 1.2 unittest 核心要素 1.TestCase 2.TestSuite 3.TextTestRunner 4.Fixture 1.3 TestCase 说明:一个testcase就是一条测试用例 使用: 1.导包 import unittest 导入unittest框架 2.继承 unittest.TestCase 新建测试类继承unittest.TestCase 提示: 1.测试用例:在自动化测试用,一条用例就是一个完整的测试流程 2.测试方法名称必须以test开头 1.4 TestSuite 说明:测试套件,多条测试用例集合在一起就是一个TestSuite 使用: 1.实例化:suite=unittest.TestSuite() suite为TestSuite得实例化名称 2.添加用例:suite.addTest(类名(‘方法名’)) 3.添加整个类:suite.addTest(unittest.makeSuite(类名)) 搜索指定类中以test开头的方法 提示:一条测试用例内,多个方法也可以被执行 testsuite要配合TextTestRunner才能被执行 1.5 TextTestRunner 说明:测试执行,用来执行测试用例套件的 使用: 1.实例化 runner=unittest.TextTestRunner() runner是texttestrunner的实例化名称 2.执行 runner.run(suite) suite为测试套件名字 1.6 Fixture 说明:是一个概述,测试环境的搭建和销毁 使用: 1.初始化(搭建) def setup( ) 首先执行 此方法继承于unittest.TestCase 2.结束 def teardown() 最后执行 此方法继承于unittest.TestCase 提示: 1.必须继承于unittest.TestCase类,setup和teardown才是一个Fixture 2.setup一般做初始化工作,比如:实例化浏览器,浏览器最大化,设置隐式等待 2.teardown一般做结束工作,比如:退出登录,关闭浏览器 4.如果一个测试类有多个test开头方法,每个方法执行前都运行setup,结束时运行teardown
2.uniTest断言 断言分类: 1.布尔类型断言 2.比较断言 3.复杂断言 2.1 布尔类型断言 结果只有True和False
|