断言 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 ()
这里我先简单介绍一下常用断言, 具体的如何使用应具体应用而定.
来源: https://www.cnblogs.com/wuweiblogs/p/10610555.html