pytest 断言抛出预期异常

使用 pytest 编写测试用例过程中,需要用到断言是否抛出一个预期中的异常。

什么意思呢? 通过这个实例了解一下。

例:在网页中有一个滑块 ele_drag,需要拖拽到指定位置 ele_drop(class=“item”),当滑块填充完成后,ele_drop 的 class 就会变更名称,如何断言?

def test_hold_move_to_ele(self):
   self.driver.get(window)  # window 是测试网页
   
   # 有一个可填充区域,class = item
   # 当拖动滑块填充完成该区域后,class 变更为其他名称
   
   # 滑块控件
   ele_drag = self.driver.find_element_by_id("dragger")
   # 可填充区域控件
   ele_drop = self.driver.find_elements_by_xpath(f"//div[@class='item']")[0]
   # 进行移动
   self.action.click_and_hold(ele_drag).move_to_element(ele_drop).release().perform()
	
   # 断言滑块控件的 class 不存在 

通常办法有两种:

1、 通过 find_elements 获取元素的列表,判断是否为空;

2、通过 try except 捕获异常,如果 try 内的 find_element 没有报错,则赋值一个变量为真,证明元素存在,否则赋值变量为 false。


还有一种办法:

当元素查找不到时会抛出 NoSuchElementException 异常,那么在用例最后查找 class=item 的元素时,只要抛出该异常,那么就符合我的预期,对吧?

pytest 提供了这样的实现方式,经过测试,可用且代码优雅。

def test_hold_move_to_ele(self):
   self.driver.get(window)  # window 是测试网页
   
   # 有一个可填充区域,class = item
   # 当拖动滑块填充完成该区域后,class 变更为其他名称
   
   # 滑块控件
   ele_drag = self.driver.find_element_by_id("dragger")
   # 可填充区域控件
   ele_drop = self.driver.find_elements_by_xpath(f"//div[@class='item']")[0]
   # 进行移动
   self.action.click_and_hold(ele_drag).move_to_element(ele_drop).release().perform()
	
   # 断言是否抛出预期异常,是则用例通过,否则用例失败
   with pytest.raises(NoSuchElementException):
        self.driver.find_element_by_xpath(f"//div[@class='item']")
完。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值