Selenium自动化测试(断言 / fame框架处理)
一、断言
1、验证应用程序的状态是否同所期望的一致
2、常见的断言包括:验证页面内容,如标题是否为xxx或当前位置是否正确,或是验证该复选框是否被勾选
unittest中常用的assert(断言)语句
assertEqual(a, b) # a == b
assertNotEqual(a, b) # a != b
assertTrue(x) # bool(x) is True
assertFalse(x) # bool(x) is False
assertIs(a, b) # a is b
assertIsNot(a, b) # a is not b
assertIsNone(x) # x is None
assertIsNotNone(x) # x is not None
assertIn(a, b) # a in b
assertNotIn(a, b) # a not in b
assertIsInstance(a, b) # isinstance(a, b)
assertNotIsInstance(a, b) # not isinstance(a, b)
assertGreater(a, b) # a > b
assertGreaterEqual(a, b) # a >= b
assertLess(a, b) # a < b
assertLessEqual(a, b) # a <= b
实例代码块:
aq = self.locator(self.ass).text # 用于断言登录成功的文本内容
try:
self.assertIn("欢迎您", aq)
self.test_log.info("普通信息 [test_01_login] 测试成功-预期结果 [%s]" % state) #在日志里显示
self.close()
# self.logger.info("test_01_login:测试成功-预期结果 [%s]" % state) # 日志文件(断言失败会写到日志里)
except AssertionError:
self.picture()
self.test_log.error("错误信息 [test_01_login] 测试失败")
# self.logger.info("test_01_login:测试失败")
raise AssertionError # 抛出异常
异常类型:
AssertionError:assert语句失败
AttributeError:试图访问一个对象没有的属性
IOError:输入输出异常,基本是无法打开文件
ImportError:无法引入模块或者包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问字典里不存在的键
KeyboadrInterrupt:Ctrl+c被按下
NameError:使用一个还未赋值对象的变量
SyntaxError:python代码逻辑语法错误,不能执行
TypeError:传入的对象类型与要求不符
UnboundLocalError:试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问
ValueError:传入一个不被期望的值,即使类型正确
二、fame框架
有时候我们老定位不到元素,这里不妨看一下前端开发的项目是否有fame框架页,有的话大概率是这个问题,需要进入fame框架页才可以操作元素,适当的添加休眠的时间
# 进入框架
driver.switch_to.frame("menu-frame")
driver.find_element(By.CSS_SELECTOR, "a[href='goods.php?act=list']").click()
# 退出框架
driver.switch_to.default_content() # 退出框架
# 再进入框架(操作元素)
driver.switch_to.frame("menu-frame")
driver.find_element(By.LINK_TEXT, '添加新商品').click()
三、下拉框处理
如遇到选择商品类型、选择收货地址等
from selenium.webdriver.support.select import Select
sel = Select(driver.find_element_by_name('cat_id'))
sel.select_by_value('8') # 通过值选中
sel.select_by_index('4') # 通过下标选中
sel.select_by_visible_text('充电器') # 通过文本选中,必须与文本一样包括空格