当前位置: 首页 > news >正文

Selenium、Pytest自动化测试

Selenium、Pytest自动化测试----参数化&断言

  • 前言
    • 多条用例之间相互影响
    • toast&alert断言
    • 参数化时对不同的用例进行断言

前言

在学习Selenium、Pytest时,遇到了一些问题,在此记录

多条用例之间相互影响

在验证同一个模块的不同用例时,需要保证各个用例之间不能相互影响。例如,在验证登录功能时,第一条用例是验证用户名密码错误登录失败的功能,第二条的用例是验证登录成功功能,代码如下:

deftest_login_01(self,username,password,result):self.driver.find_element(By.XPATH,"//input[@placeholder='ID 或 邮箱']").send_keys(username)self.driver.find_element(By.XPATH,"//input[@placeholder='密码']").send_keys(password)self.driver.find_element(By.XPATH,"//button[@type='button']").click()

由于第一条用例执行后,并没有做文本框的清除功能,就导致在执行第二条用例时,第一条用例在文本框输入的数据与第二条用例在文本框输入的数据叠加,导致第二条也不能登录成功

最开始采用在每条用例执行完之后定位到文本框元素,然后使用**clear()**方法执行清除操作,但是在执行登录成功的用例时,登陆成功后跳转页面,导致无法找到登录页面的文本框,会报错,所以采用了刷新页面的方法,在每条用例执行后重置状态,保证每条用例之间不能相互影响:

defteardown_method(self):self.driver.get("https://test-metersphere.com/#/login")self.driver.delete_all_cookies()self.driver.refresh()time.sleep(5)

这里使用了teardown后置处理,并且把范围限制为类中的方法,重置驱动url,并且删除cookie,然后刷新浏览器,这样在执行完一条用例之后就会重置状态,以免影响后续用例。

toast&alert断言

要正确区分toast与alert的区别,项目在登录失败时会出现一个toast提示登录失败,最开始时,博主将toast当成了alert进行断言,执行后程序一直报错:

alert=WebDriverWait(self.driver,5).until(EC.alert_is_present())
Raises: TimeoutException: If 'method' does not return a truthy value within the WebDriverWait object's timeout.

这里设置的等待alert弹窗出现时间为5秒,由于是toast弹窗,所以一直没有等到alert弹窗出现,导致了timeoutexception异常,后续发现是toast提示,修改代码:

toast=WebDriverWait(self.driver,5).until(EC.visibility_of_element_located((By.XPATH,"//div[normalize-space()='用户名或密码不正确']")))

然后在使用assert断言toast弹框文本,第一条登录失败的用例就执行成功了。
注意:

  • 在等待toast元素出现时,代码中:EC.visibility_of_element_located()方法的入参期望的是一个定位器元组(即 (By.方式, “值”)),而不是两个分开的参数,注意要多加一层括号
  • 设置合理的等待时间很有必要,如果页面没有渲染完成就去定位元素可能出现异常,但是如果设置的等待时间过程,又会拉低程序执行的效率,所以要注意这一点,等博主后续深入了解后再另作分享。

参数化时对不同的用例进行断言

这里博主使用简单的if语句对预期result进行判断,然后在设置不同的断言,较为简单,后续深入了解再分享
注意:
这里第二条用例执行成功后会跳转到系统首页,博主对当前地址进行了断言操作,由于跳转需要等待加载时间,所以在断言前设置了3s的等待时间,否则可能会断言失败。

time.sleep(3)assertresult==self.driver.current_url
http://www.cnnetsun.cn/news/1345147.html

相关文章:

  • 自学C++随手记(四)
  • 欧意注册okxz.run复制打开-2026年最新版V5.6.12.5.317安卓/苹果版
  • 网络:9.数据链路层
  • 深度解析:HarmonyOS金融/保险类应用开发实战与进阶指南
  • 2026年行业内TOP10专业房产获客平台排行榜单,你知道几
  • **Envoy + Go 实战:打造高性能服务网格代理的轻量级配置方案**在现代微服务
  • RK3588部署YOLOv6全攻略
  • 突破性光处理器:AI计算迈入光速时代
  • **发散创新:基于分片技术的高性能数据处理架构实践与优化**在现代分布式系统中,**分片(Sharding)技术*
  • 2026年展望:人生仓库集团如何稳健前行,赢得客户信赖?
  • 汽车软件品牌升级实践框架:如何把”可控感”落到架构、证据与场景中
  • 5. Spring DI 依赖注入(构造器、Setter)
  • Robotstudio6.08坐标实用教程
  • 西门子1200与欧姆龙E5cc温控器通讯控制全解析
  • testtest
  • CNN - BiLSTM - Attention分类:新手友好的多分类实战
  • 智慧农业农业智能诊断、植物保护 葡萄叶片病害分割数据集 基于 PyTorch + Torchvision 的 DeepLabV3+ 训练葡萄叶片分割数据集
  • 移动端适配的隐藏坑:这5个错误90%的人在犯
  • 【已解决】java文件未被识别 显示咖啡杯图标
  • Python学习路线图(如果你计划快速的学习掌握python)
  • 文献检索如何限制文献类型(期刊 / 会议 / 综述)?3 个技巧让结果更精准
  • 欧姆龙FinsUdp协议报文例子
  • 【最新版】2026年OpenClaw阿里云5分钟搭建及使用保姆级教程
  • 文华财经精准识别高低点20日均线 + 极值标注指标编写教程
  • Java入门第154课——Oracle 数据库入门与基础操作
  • 2026年中秋手抄报模板返工一次后,我总结的模板筛选与修改经验
  • 在AI Agent爆发前夜,我们必须对自己进行一次“颠覆”
  • Kotlin的reified泛型:在运行时保留类型信息
  • 代差级突破|2026 女性经期新选择:专属特殊膳食饮品深度评测
  • android studio安装及配置jdk17