Selenium3 + Python3自动化测试系列五——常用断言Assertion
断言assertion
验证应用程序的状态是否同所期望的一致。
常见的断言包括:验证页面内容,如标题是否为x或当前位置是否正确,或是验证该复选框是否被勾选。
selenium 提供了三种模式的断言:assert 、verify、waitfor
assert 失败时,该测试将终止。
verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上
waitfor 用于等待某些条件变为真。可用于 ajax 应用程序的测试。
如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超过时间。
一般跟settimeout时间一起使用。
一、常用断言
assertlocation(判断当前是在正确的页面)、
asserttitle(检查当前页面的 title 是否正确)、
assertvalue(检查 input 的值, checkbox 或 radio,有值为”on”无为”off”)、
assertselected(检查 select 的下拉菜单中选中是否正确)、
assertselectedoptions(检查下拉菜单中的选项的是否正确)、
asserttext(检查指定元素的文本)、
asserttextpresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
asserttextnotpresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
assertattribute(检查当前指定元素的属性的值)、
asserttable(检查 table 里的某个 cell 中的值)、
asserteditable(检查指定的 input 是否可以编辑)、
assertnoteditable(检查指定的 input 是否不可以编辑)、
assertalert(检查是否有产生带指定 message 的 alert 对话框)、
verifytitle (检查预期的页面标题)
verifytextpresent (验证预期的文本是否在页面上的某个位置)
verifyelementpresent(验证预期的ui元素,它的html标签的定义,是否在当前网页上)
verifytext(核实预期的文本和相应的html标签是否都存在于页面上)
verifytable(验证表的预期内容)
waitforpagetoload(暂停执行,直到预期的新的页面加载)
waitforelementpresent (等待检验某元素的存在。为真时,则执行。)
验证和断言的区别:验证失败后不影响脚本的继续执行,断言失败后将停止脚本的执行。
二、异常类型
assertionerror:assert语句失败
attributeerror:试图访问一个对象没有的属性
ioerror:输入输出异常,基本是无法打开文件
importerror:无法引入模块或者包,基本是路径问题
indentationerror:语法错误,代码没有正确的对齐
indexerror:下标索引超出序列边界
keyerror:试图访问字典里不存在的键
keyboadrinterrupt:ctrl+c被按下
nameerror:使用一个还未赋值对象的变量
syntaxerror:python代码逻辑语法错误,不能执行
typeerror:传入的对象类型与要求不符
unboundlocalerror:试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问
valueerror:传入一个不被期望的值,即使类型正确
我们来看举个栗子,python3 +selenium3,验证标题是否包含‘百度一我’:
from selenium.webdriver import chrome import time driver = chrome("c:\program files (x86)\google\chrome\application\chromedriver.exe") driver.get('https://www.baidu.com') try: assert u"百度一我" in driver.title print("assertion test pass") except exception as e: print("assertion test fail",format(e)) print(driver.title) time.sleep(5) driver.quit()
结果如下:
三、unittest框架中的断言
在unittest单元测试框架中,testcase类提供了一些方法来检查并报告故障
assertequal(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,相等则测试用例通过。
assertnotequal(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,不相等则测试用例通过。
asserttrue(x,[msg='测试失败时打印的信息']): 断言x是否true,是true则测试用例通过。
assertfalse(x,[msg='测试失败时打印的信息']): 断言x是否false,是false则测试用例通过。
assertis(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,是则测试用例通过。
assertnotis(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,不是则测试用例通过。
assertisnone(x,[msg='测试失败时打印的信息']): 断言x是否none,是none则测试用例通过。
assertisnotnone(x,[msg='测试失败时打印的信息']): 断言x是否none,不是none则测试用例通过。
assertin(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,在b中则测试用例通过。
assertnotin(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,不在b中则测试用例通过。
assertisinstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,是则测试用例通过。
assertnotisinstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,不是则测试用例通过。
我们来小试一下牛刀:
class assertequal1(unittest.testcase): def setup(self): number = input ("enter a number:") self.number = int (number) def test_case(self): self.assertequal (self.number, 10, msg='your input is not 10!') def teardown(self): pass if __name__ == '__main__': unittest.main ()
这里我先简单介绍一下常用断言,具体的如何使用应具体应用而定。
推荐阅读
-
Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动
-
Selenium3 + Python3自动化测试系列三——控制浏览器操作
-
Selenium3 + Python3自动化测试系列六——等待方式
-
Selenium3 + Python3自动化测试系列四——鼠标事件和键盘事件
-
Selenium3 + Python3自动化测试系列九——cookie操作
-
Selenium3 + Python3自动化测试系列五——常用断言Assertion
-
Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动
-
Selenium3 + Python3自动化测试系列六——等待方式
-
Selenium3 + Python3自动化测试系列四——鼠标事件和键盘事件
-
Selenium3 + Python3自动化测试系列三——控制浏览器操作