Python Selenium实现断言的3种方法解析

小石头
小石头
发布时间:2026-10-14| 5人浏览过
原创

本文详细解析Python Selenium自动化测试中三种常用的断言实现方式。通过if...else判断、try...except异常捕获以及基于unittest框架的assert系列方法,帮助开发者灵活处理页面元素验证。文章结合具体代码示例,对比各方法的适用场景与优缺点,为Web自动化测试提供实用的断言策略参考。

基于if...else判断的断言实现

第一种断言方式是利用if...else语句进行逻辑判断。在自动化测试脚本中,可以通过获取页面元素的状态或文本内容,与预期结果进行比对。若条件满足则继续执行,否则通过raise AssertionError抛出异常,终止当前测试流程。这种方式直观易懂,适合简单的逻辑验证场景。


from time import *
from selenium import webdriver
def login(user="admin",pwd="123456"):
  driver = webdriver.Chrome()
  driver.implicitly_wait(10)
  driver.get("http://192.168.1.110:8080/cms")
  driver.maximize_window()
  sleep(1)
  driver.find_element_by_id("userAccount").send_keys(user)
  sleep(1)
  driver.find_element_by_id("loginPwd").send_keys(pwd)
  sleep(1)
  driver.find_element_by_id("loginBtn").click()  #登录
  sleep(1)
  users = driver.find_element_by_class_name("c-white").text  #获取用户名
  sleep(1)
  driver.quit()
  if users[6:] == user:
    pass
  else:
    raise AssertionError

if __name__ == '__main__':
  login()

from time import *
from selenium import webdriver
def login(user="admin",pwd="123456"):
  driver = webdriver.Chrome()
  driver.implicitly_wait(10)
  driver.get("http://192.168.1.110:8080/cms")
  driver.maximize_window()
  sleep(1)
  driver.find_element_by_id("userAccount").send_keys(user)
  sleep(1)
  driver.find_element_by_id("loginPwd").send_keys(pwd)
  sleep(1)
  driver.find_element_by_id("loginBtn").click()  #登录
  sleep(1)
  users = driver.find_element_by_class_name("c-white").text  #获取用户名
  sleep(1)
  driver.quit()
  if users[6:7] == user:
    pass
  else:
    assert False

if __name__ == '__main__':
  login()

基于try...except异常的断言实现

第二种方式采用try...except结构进行断言。在执行可能抛出异常的代码块时,使用try包裹核心操作,并在except中捕获异常后手动抛出AssertionError。这种方法适用于预期操作可能失败且需要明确区分错误类型的场景,通过异常捕获机制确保测试的健壮性。


from time import *
from selenium import webdriver
def fatie(title,body):
  dr = login()
  sleep(2)
  dr.find_element_by_partial_link_text("版块").click()
  sleep(1)
  dr.find_element_by_id("subject").send_keys(title)
  sleep(1)
  dr.find_element_by_id("fastpostmessage").send_keys(body)
  sleep(2)
  dr.find_element_by_name("topicsubmit").click()
  sleep(2)
  try:
    dr.find_element_by_id("thread_subject")
  except:
    raise AssertionError
  else:
    pass
  sleep(3)
  dr.quit()

基于unittest框架的assert断言方法

第三种方式是基于unittest框架的assert断言方法。unittest提供了丰富的断言工具,如assertIn、assertNotIn、assertEqual和assertNotEqual等,用于验证元素是否存在、是否相等或包含特定子串。这些方法不仅语法简洁,还能在测试失败时提供详细的错误信息,便于问题定位。

  • assertIn(arg1, arg2, msg=None)用于验证arg1是否包含在arg2中,若arg1不是arg2的子串,则测试失败。该方法常用于检查页面文本或属性中是否包含预期的关键词或字符串片段。
  • assertNotIn(arg1, arg2, msg=None)用于验证arg1是否不包含在arg2中,若arg1是arg2的子串,则测试失败。此方法适用于需要排除特定内容或确认某元素不存在于预期文本中的场景。
  • assertEqual(arg1, arg2, msg=None)用于验证arg1与arg2是否相等,若两者不相等,则测试失败。这是最常用的断言方法之一,适用于数值、字符串或对象状态的精确比对。
  • assertNotEqual(arg1, arg2, msg=None)用于验证arg1与arg2是否不相等,若两者相等,则测试失败。该方法适用于需要确认两个值存在差异的场景,如验证错误提示或动态变化的数据。

import time
import unittest

class Test(unittest.TestCase):
  def test01(self):
    self.assertEqual(2,2,msg="test01 error!")

  def test02(self):
    self.assertNotEqual(1,2,msg="test02 error!")

  def test03(self):
    self.assertIn("fang","xinfangshuo",msg="test03 error!")

  def test04(self):
    self.assertNotIn("xing","xinfangshuo",msg="test04 error!")

  def tearDown(self):
    time.sleep(1)

if __name__ == '__main__':
  unittest.main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。