1、自动化测试的概念
2、自动化测试优点
3、自动化测试的分类
4、xpath路径表达式
@的使用方法:
(1)路径[@属性名]
(2)路径[@属性名=‘属性值’]
5、查找某个特定的节点或者包含某个指定值的节点
在xpath中列表结果以1开头
6、通配符
* ;@;(是星号)
//:匹配所有节点
/*:匹配绝对路径最外层
/html/node():匹配html的子标签
7、选取若干路径
(1)//*[starts-with(@属性名,‘属性值’)] (值的拼写不全也能找出来,但值的开头要写上;contains中则不用,只要是属性值中的内容就可以)
(2)最后一个要两个属性值完全匹配
8、css选择器
(1)element>element:选中的其实是父子关系
(2)element+element:选中的是兄弟关系
(3)[[attribute~=value] 或者[attribute|=value]:要求value是一个完整的单词(有的class里面有两个属性,value即为其中一个)
(4)写属性值的时候给属性值加上引号,属性值有多个的时候写其中一个时同样。
9、框架的定义
10、seleniunm IDE(仅支持火狐)
1.文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。
2.用来填写被测网站的地址。
3.速度控制:控制案例的运行速度。
4.运行所有:运行一个测试案例集中的所有案例。
5.运行:运行当前选定的测试案例。
6.暂停/恢复:暂停和恢复测试案例执行。
7.单步:可以运行一个案例中的一行命令。
8.录制:点击之后,开始记录你对浏览器的操作。
9.案例集列表。
10.测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。
11.查看脚本运行通过/失败的个数。
12.当选中前命令对应参数。
13.日志/参考/UI元素/Rollup
11、selenium组件
12、selenium页面操作
12.1.1 url的格式:
中括号格式的可以没有。比如:[:port#]
12.1.2 页面请求操作
12.2 获取断言信息
get_screenshot_as_png()保存的是二进制文件;get_screenshot_as_file(‘file’)保存的是图片
12.3 元素定位
12.3.1 元素定位方法分类
(1)使用标签名定位时,如果该标签不是唯一,则返回的是一组标签中的第一个标签
(2)使用xpath定位时,xpath中有双引号时,外面用单引号;xpath中有单引号时,外面用双引号。eg:el = driver.find_element_by_xpath(’//*[@id=“screening”]/div[1]/h2/span[2]/a’)
12.4 定位一组元素
driver.find_elements_by_xxx(value)
该方法返回一个元素对象列表
12.5 元素的操作
12.6、多标签之间的切换
有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。
建议使用driver.switch_to.window(handles[n])。(版本问题)
12.7 多表单之间的切换
1)什么是多表单?
实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
3)多表单切换
driver.switch_to.default_content()
跳回最外层的页面。
driver.switch_to.parent_frame()
跳回上层的页面。
12.8 鼠标和键盘操作
手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供
(1)鼠标操作
导入动作链类,动作链可以储存鼠标的动作,并一起执行
from selenium.webdriver import ActionChains
ActionChains(driver)
执行ActionChains中储存的所有动作
perform()
1) 鼠标右击
el = driver.find_element_by_xxx(value)
context_click(el)
对el执行右击
2)双击操作
el = driver.find_element_by_xxx(value)
ActionChains(driver).double_click(el).perform()
3)鼠标悬停
el = driver.find_element_by_xxx(value)
ActionChains(driver).move_to_element(el).perform()
(2)键盘操作
键盘操作使用的是Keys类,一般配合send_keys使用
导入
from selenium.webdriver.common.key import Key
常用键盘操作
1)send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
2)send_keys(Keys.SPACE) 空格键(Space)
3)send_keys(Keys.TAB) 制表键(Tab)
4)send_keys(Keys.ESCAPE) 回退键(Esc)
5)send_keys(Keys.ENTER) 回车键(Enter)
6)send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
7)send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
8)send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
9)send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
10)send_keys(Keys.F1) 键盘 F1
…
11)send_keys(Keys.F12) 键盘 F12
12.9弹出框操作
-
进入到弹出框中
driver.switch_to.alert() -
接收警告(点击弹出框中的‘确定’)
accept() -
解散警告(点击弹出框中的‘X’)
dismiss() -
发送文本到警告框
send_keys(data)
使用:driver.switch_to.alert.accept()
12.10 下拉框操作
selenium关于下拉框的操作都交由Select类进行处理,一般获取到下拉框元素之后使用该类构建对象,调用对象的响应方法就能操作元素
-
导入Select类
from selenium.webdriver.support.select import Select -
将定位到的下拉框元素传入Select类中
selobj = Select(element) 下拉框元素已经定位到 -
调用响应方法选择下拉框中的选项
select_by_index() 通过索引选择,index 索引从 0 开始
select_by_value() 通过值选择(option标签的一个属性值)
select_by_visible_text() 通过文本选择(下拉框的值)
eg:<option value="10" selected="">每页显示10条</option>
了解:
all_selected_options 查看所有已选
first_selected_option 查看第一个已选
is_multiple 查看是否是多选(布尔值)
options 查看选项元素列表
取消选择
deselect_by_index()
deselect_by_value()
deselect_by_visible_text()
12.11 selenium执行js
(1)方法
1) js = "window.scrollTo(x,y) " x为水平拖动距离,y为垂直拖动举例
2)js= “var q=document.documentElement.scrollTop=n” n为从顶部往下移动滚动距离
(2)driver.execute_script(js) 执行js代码
12.12 显式等待与隐式等待
(1)显式等待
显式等待是根据条件进行等待,等待条件出现
实现:
from selenium.webdriver.common.by import By
导入WebDriverWait等待类
from selenium.webdriver.support.ui import WebDriverWait
导入预期条件设置类
from selenium.webdriver.support import expected_conditions as EC
如果没有预期条件设置类可使用
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
如果没有预期条件设置类可使用
WebDriverWait(driver, timeout, poll_frequency=0.5).until(EC.presence_of_element_located())
eg:WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg')))
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
(2)隐式等待
隐式等待是根据是件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要元素定位到就结束等待,超过最大值还没有定位到会报错
优先 隐式等待; 次之 显式等待; 最次 固定等待
12.13 cookies操作
1) 什么是cookies?
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行会话保持而储存在用户本地终端上的数据(通常经过加密)
2)为什么要使用cookies?
1.因为http是无状态协议,他不对之前的的访问状态做管理,也就是说无法根据之前的登录状态进行本次访问的处理。
2.没有状态管理就不能保持登录状态,这样就会很麻烦。
3)selenium对cookies的操作
get_cookies() 获取所有cookies
get_cookie(key) 获取key对应的值
add_cookie(cookie_dict) 设置cookies
delete_cookie(name) 删除指定名称的cookie
delete_all_cookies() 删除所有cookie
13、unittest模块
Unittest单元测试框架是专门用来进行测试的框架
13.2 主要概念:
test fixture: 代表了用例执行前的准备工作和用例执行之后的清理工作。
(setUp()用于初始化一些参数,在测试用例执行前自动被调用;tearDown()用于清理,在测试用例执行后被调用)
test case: 测试用例,是测试的最小单位,一般检查一组输入的响应(输出)是否符合预期。unittest模块提供了TestCase类来帮助我们创建测试用例;(在TestCase类中,只把以test开头的方法当做测试用例,然后执行)
test suite: 经常被翻译成”测试套件”,也有人称为”测试套”,是测试用例或测试套件的集合,一般用来把需要一起执行的用例组合到一起;
test runner: 用来执行测试用例并输出测试结果的组件。可以是图形界面或命令行界面;
13.3 unittest基本用法
1.通过继承unittest.TestCase进行编写,继承unittest.TestCase的类会被框架识别为测试用例。
2.setUp和TearDown是用于事前和事后做相关处理动作的,就是前面说的Test Fixture,会在每个测试用例运行前后被框架自动调用
3.所有以test开头的方法会被框架自动识别为测试用例,并自动调用执行,不是以test开头的不会被调用
4.unittest.main()是最简单的测试执行方式
5.调用unittest.main()方法后,继承自unittest.TestCase类的类会被自动识别为测试用例并且被调用。