目前我写的app自动化测试脚本 用的是unittest单元测试框架,在基本完成用例设计后,开始考虑如何来做断言;(虽然学习一段时间的自动化,但用例基本不做断言,除了登录后的拿用户名验证登录的成功与否)。基础知识我就不做分享,分享下我目前的经验。
个人博客:https://blog.csdn.net/zyooooxie
一)assertEqual()
assertEqual:如两个值相等,则pass
assertEqual:如两个值不相等,则fail
self.assertEqual(4 + 5,9,‘The result is False’)
self.assertEqual(self.xin_find_element(By.ID, self.name_id).get_attribute('name'), self.DY_name[1])
代码的意思为:找到的某元素的name字段值 和我预期的 一致。
我这样写,是有个前提:要先找到元素!
二)assertTrue()
assertTrue:判断bool值为True,则pass
assertTrue:判断bool值为False,则fail
self.assertTrue(4 + 5 == 9,“The result is False”)
但是网上有些教程推荐这儿来做 判断元素存在与否,写法:self.assertTrue(self.driver.find_elemnt_by_xx(‘xxxx’).XXXX)
XXXX 是 isEnable()检查元素是否被启用 isDisplay()检查元素是否可见
但是我有些疑问:
1.断言中 查找这个元素是否需要等待,时间太短没找到 怎么办?
2.若是 不存在的元素,实际这条用例的结果是怎么样的?
答:
1.可以使用显式等待来做智能等待;
2.结果是 selenium.common.exceptions.NoSuchElementException。就是说你想要的元素没找到,给的结果不是断言的结果!
(个人理解)HTMLTestRunner生成的测试报告,有三个不同结果:通过(pass),失败(fail),错误(error)
三)断言:某些新界面的某元素是否存在,不存在就自动截图;存在,就断言通过
def duanyan_chazhaoyuansu(self, by, locator):
duanyan = True
try:
self.xin_find_element(by, locator)
print('找到元素,断言成功')
except:
self.driver.get_screenshot_as_file(
r'D:\xxxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
duanyan = False
if duanyan is True:
self.assertTrue(duanyan, '断言错了,没找到元素')
else:
self.assertTrue(duanyan, '断言失败了,没找到元素')
xin_find_elemnt()使用显式等待;传入的by是common的By类;
这样写的好处是 如果元素找到了,直接 print(‘找到元素,断言成功’),断言通过;如果元素没找到,自动截图,没能通过断言,提示msg=‘断言失败了,没找到元素’。
四)反面举例:聊天记录被清空,返回会话界面,查找聊天记录的元素,做断言
def test_03_d482k(self):
"""清空聊天记录"""
# 在设置里面 清空聊天记录 确定后 返回会话
self.wodehuodong()
self.xin_find_element(By.ID, self.wode_jinruqunliao_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_queding_id).click()
self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_fanhui_id).click()
duanyan = True
try:
self.xin_find_element(By.ID, 'message_chat_right_text_text')
self.driver.get_screenshot_as_file(
r'D:\xxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
except:
duanyan = False
print('没找到元素,能清空聊天记录,断言成功了')
if duanyan is True:
self.assertFalse(duanyan, '断言失败了,找到元素,实际聊天记录还有未清空掉的')
else:
self.assertFalse(duanyan, '居然找到元素了!!!')
self.xin_print()
某聊天界面的某会话中,设置,选择-清空聊天记录,确定,返回会话界面。
duanyan = True
try 去寻找元素(那个id是定位 聊天记录)
如果查找到,自动截图,断言失败,msg='断言失败了(找到元素,实际聊天记录还有)
如果没找到,duanyan = False,直接print(‘没找到元素,能清空聊天记录,断言成功了’)
断言的新想法
这一部分是2020年9月和某位朋友交流后,我做的更新。
上面我都定义了一个叫做duanyan的变量,但我现在看来,有点没必要。
思路为:某些操作后,出现新界面,新界面的某元素是原本界面不会出现的,我以此来做断言(找到,断言成功;找不到,断言失败)
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time
try:
self.xin_find_element(By.ID, 'zyooooxie')
print('显示等待,去寻找某元素;找到了,代表:断言成功')
except NoSuchElementException:
print('显示等待,去寻找某元素;没找到,截图,主动抛出异常')
self.driver.get_screenshot_as_file(
r'D:\zyooooxie\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
raise AssertionError
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie