UI自动化测试案例——简单的Google搜索测试
以下是一个UI自动化测试的经典案例:
import unittest
from selenium import webdriverclass GoogleSearchTest(unittest.TestCase):def setUp(self):# 创建Chrome浏览器实例self.driver = webdriver.Chrome()self.driver.maximize_window() # 最大化浏览器窗口def tearDown(self):self.driver.quit() # 关闭浏览器实例def test_google_search(self):self.driver.get("https://www.google.com") # 打开Google首页self.assertEqual(self.driver.title, "Google") # 校验页面标题是否为"Google"search_box = self.driver.find_element_by_name("q") # 找到搜索框元素search_box.send_keys("Selenium WebDriver") # 在搜索框中输入"Selenium WebDriver"search_box.submit() # 提交搜索请求search_results = self.driver.find_elements_by_css_selector("div.g") # 找到搜索结果元素列表self.assertGreater(len(search_results), 0) # 校验搜索结果列表是否不为空first_result = search_results[0] # 取出第一个搜索结果元素first_result_link = first_result.find_element_by_tag_name("a") # 找到第一个搜索结果元素中的链接元素first_result_link.click() # 点击链接self.assertIn("Selenium - Web Browser Automation", self.driver.title) # 校验新页面标题是否包含"Selenium - Web Browser Automation"
具体的测试步骤如下:
- 打开Google首页
- 校验页面标题是否为"Google"
- 在搜索框中输入"Selenium WebDriver"
- 提交搜索请求
- 校验搜索结果列表是否不为空
- 取出第一个搜索结果元素
- 找到第一个搜索结果元素中的链接元素
- 点击链接
- 校验新页面标题是否包含"Selenium - Web Browser Automation"
这个测试案例使用了Python的unittest测试框架和Selenium WebDriver库。在测试开始前,会在setUp()方法中创建Chrome浏览器实例,并将浏览器窗口最大化。在测试结束后,会在tearDown()方法中关闭浏览器实例。
测试方法test_google_search()中,首先打开Google首页,然后校验页面标题是否为"Google"。接着,在搜索框中输入"Selenium WebDriver",并提交搜索请求。然后,通过CSS选择器找到搜索结果元素列表,并校验列表是否不为空。接着,取出第一个搜索结果元素,并找到其中的链接元素,点击链接。最后,校验新页面标题是否包含"Selenium - Web Browser Automation"。
在测试过程中,如果有任何一个断言失败,测试框架会抛出AssertionError异常,测试将会失败。如果所有断言都通过,测试将会通过。
接下来我们来分析一下这个测试案例的代码。
首先,在setUp()方法中,我们创建了一个Chrome浏览器实例,并将浏览器窗口最大化:
def setUp(self):# 创建Chrome浏览器实例self.driver = webdriver.Chrome()self.driver.maximize_window() # 最大化浏览器窗口
这里我们使用了Selenium WebDriver库中的webdriver.Chrome()方法来创建Chrome浏览器实例。然后,通过调用maximize_window()方法,将浏览器窗口最大化。
在tearDown()方法中,我们关闭了浏览器实例:
def tearDown(self):self.driver.quit() # 关闭浏览器实例
这里我们使用了Selenium WebDriver库中的quit()方法来关闭浏览器实例。
在test_google_search()方法中,我们执行了一个完整的Google搜索的UI自动化测试:
def test_google_search(self):self.driver.get("https://www.google.com") # 打开Google首页self.assertEqual(self.driver.title, "Google") # 校验页面标题是否为"Google"search_box = self.driver.find_element_by_name("q") # 找到搜索框元素search_box.send_keys("Selenium WebDriver") # 在搜索框中输入"Selenium WebDriver"search_box.submit() # 提交搜索请求search_results = self.driver.find_elements_by_css_selector("div.g") # 找到搜索结果元素列表self.assertGreater(len(search_results), 0) # 校验搜索结果列表是否不为空first_result = search_results[0] # 取出第一个搜索结果元素first_result_link = first_result.find_element_by_tag_name("a") # 找到第一个搜索结果元素中的链接元素first_result_link.click() # 点击链接self.assertIn("Selenium - Web Browser Automation", self.driver.title) # 校验新页面标题是否包含"Selenium - Web Browser Automation"
首先,我们打开了Google首页,并校验了页面标题是否为"Google":
self.driver.get("https://www.google.com") # 打开Google首页
self.assertEqual(self.driver.title, "Google") # 校验页面标题是否为"Google"
这里我们使用了Selenium WebDriver库中的get()方法来打开Google首页,然后使用unittest框架中的assertEqual()方法来校验页面标题是否为"Google"。
接下来,我们找到了搜索框元素,并在搜索框中输入了"Selenium WebDriver":
search_box = self.driver.find_element_by_name("q") # 找到搜索框元素
search_box.send_keys("Selenium WebDriver") # 在搜索框中输入"Selenium WebDriver"
search_box.submit() # 提交搜索请求
这里我们使用了Selenium WebDriver库中的find_element_by_name()方法来找到搜索框元素,然后使用send_keys()方法来在搜索框中输入关键字,最后使用submit()方法来提交搜索请求。
然后,我们找到了搜索结果元素列表,并校验了列表是否不为空:
search_results = self.driver.find_elements_by_css_selector("div.g") # 找到搜索结果元素列表
self.assertGreater(len(search_results), 0) # 校验搜索结果列表是否不为空
这里我们使用了Selenium WebDriver库中的find_elements_by_css_selector()方法来找到搜索结果元素列表,然后使用unittest框架中的assertGreater()方法来校验列表长度是否大于0。
接着,我们取出了第一个搜索结果元素,并找到了其中的链接元素,并点击了链接:
first_result = search_results[0] # 取出第一个搜索结果元素
first_result_link = first_result.find_element_by_tag_name("a") # 找到第一个搜索结果元素中的链接元素
first_result_link.click() # 点击链接
这里我们使用了Python的列表索引和Selenium WebDriver库中的find_element_by_tag_name()方法来取出第一个搜索结果元素,并找到其中的链接元素。然后,使用click()方法来点击链接。
最后,我们校验了新页面标题是否包含"Selenium - Web Browser Automation":
self.assertIn("Selenium - Web Browser Automation", self.driver.title) # 校验新页面标题是否包含"Selenium - Web Browser Automation"
这里我们使用了unittest框架中的assertIn()方法来校验页面标题是否包含指定的文本。
总的来说,这个测试案例很简单,但是覆盖了UI自动化测试的基本流程和常用操作,适合初学者练习。
相关文章:
UI自动化测试案例——简单的Google搜索测试
以下是一个UI自动化测试的经典案例: import unittest from selenium import webdriverclass GoogleSearchTest(unittest.TestCase):def setUp(self):# 创建Chrome浏览器实例self.driver webdriver.Chrome()self.driver.maximize_window() # 最大化浏览器窗口def t…...
C++之虚函数原理
对象数据和函数的存储方式 注意说的是对象。 C中的对象存储方式是 每个对象占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数属于公共部分。 虚函数表 虚函数是通过虚函数表实现的。 C实现虚函数的方法是…...
Windows Information Protection(WIP)部署方案
目录 前言 一、方案准备工作 1、确定哪些数据需要保护 2、选择合适的加密方式...
细说Hibernate的缓存机制
Hibernate 的缓存机制主要包括一级缓存和二级缓存。 1. 一级缓存(Session 缓存): 一级缓存是 Hibernate 的 Session 级别的缓存,与每个 Session 对象相关联。当您通过 Session 对象执行查询、保存或更新操作时,Hibern…...
初识C++之线程库
目录 一、C中的线程使用 二、C的线程安全问题 1. 加锁 2. 变为原子操作 3. 递归里面的锁 4. 定时锁 5. RAII的锁 三、条件变量 1. 为什么需要条件变量 2. 条件变量的使用 2.1 条件变量的相关函数 2.2 wait函数 一、C中的线程使用 线程的概念在linux中的线程栏已经…...
ChatGLM-LLaMA-chinese-insturct 学习记录(含LoRA的源码理解)
ChatGLM-LLaMA-chinese-insturct 前言一、实验记录1.1 环境配置1.2 代码理解1.2.1 LoRA 1.4 实验结果 二、总结 前言 介绍:探索中文instruct数据在ChatGLM, LLaMA等LLM上微调表现,结合PEFT等方法降低资源需求。 Github: https://github.com/27182812/Ch…...
JuiceFS-K8s部署
目录 1、部署JuiceFS-CSI驱动2、创建OBS认证信息Secret3、创建存储类4、创建PVC--PVC创建时会自动创建PV5、创建测试Pod--测试Pod创建容器内是否挂载成功 官网文档地址:https://juicefs.com/docs/zh/csi/introduction/ 1、部署JuiceFS-CSI驱动 部署yaml如下&#x…...
2023最新版本Camtasia电脑录屏软件好不好用?
在当今数字化时代,屏幕录制成为了许多用户制作教学视频、演示文稿、游戏攻略等内容的首选。本文将为您介绍几款常用的电脑录屏软件,包括Camtasia、OBS Studio、Bandicam等,并对其进行功能和用户体验方面的比较,同时给出10款电脑录…...
第三章 Linux 初步
第三章 Linux 初步 一、 基本操作 ①登录: Linux 是多用户系统,必须用正确的用户名和口令登录后才能 进入 Linux Shell 提示符状态。 默认的文本界面 Shell 提示符有两种: •root 用户登录后的提示符: # •普通用户登录后的…...
linux环境安装使用mysql详解
01-安装MySQL并启动 1.1 环境准备 # 1.卸载mariadb,否则安装mysql会出现冲突 (1).执行命令rpm -qa | grep mariadb 会列出所有被安装的mariadb rpm 包; (2).执行命令rpm -e --nodeps mariadb-libs-5.5.56…...
SUNTANS模型学习(9)——学习Tidal forcing算例
学习Tidal forcing算例 简介网格配置与地形定解条件设置初始条件设置边界条件设置开边界处的通量计算(OpenBoundaryFluxes)开边处的速度、水位(BoundaryVelocities) 其它参数配置模拟结果 简介 SUNTANS中 tidal forcing 算例的全…...
力扣解法汇总1010. 总持续时间可被 60 整除的歌曲
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接: 力扣 描述: 在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持…...
利用老毛桃pe启动U盘启动ubuntu.iso,完成ubuntu系统的安装
1.双U盘,一个是老毛桃pe启动盘,可以启动grub4dos,加载了run模块,很好用(尤其是对不熟悉grub的小白) 2.大容量U盘存放ubuntu-desktop-i386.iso,U盘的格式是ntfs格式(其实这个不好&am…...
分享2个教学视频录制的方法!
案例:如何录制教学视频? 【我是一名老师,我想录制一些教学视频发布在网络平台上,但是我不知道如何操作。有没有人知道录制教学视频需要什么工具?如何录制?】 随着在线教育的普及,越来越多的教…...
「SQL面试题库」 No_63 报告的记录 II
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰…...
【事务】怎么去理解事务?
1、什么是事务? 事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单元。 2、事务具有哪些特性? 一个逻辑工作单元要成为事务,在关系型数据库管理系统中…...
camunda流程变量如何使用
Camunda是一个流程引擎,它支持在流程执行期间存储和操作流程变量。流程变量是一个值或对象,可以与Camunda中的流程实例、任务或执行相关联。 流程变量在Camunda中有很多用途。以下是一些常见的用途: 1、传递数据:流程变量可以用于…...
CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度
专题一 CMIP6中的模式比较计划 1.1 GCM介绍 1.2 相关比较计划介绍 专题二数据下载 2.1方法一:手动人工 利用官方网站 2.2方法二:自动 利用Python的命令行工具 2.3方法三:半自动购物车 利用官方网站 2.4 裁剪netCDF文件 …...
2023建筑设计师们有哪些好用的AI设计工具?
目前,建筑师要么单独工作,要么团队合作来完成设计过程,这可能需要数月甚至数年的时间。设计和准备用于开发的建筑物可能需要很长时间,有时甚至数年。一些比较繁琐的步骤可以自动化,但整个过程仍然需要大量的人工和时间…...
mysql主从复制与读写分离
mysql主从复制与读写分离 MySQL主从复制是一种常见的数据复制技术,用于将一个MySQL数据库服务器的数据复制到其他服务器上。 单台mysql在安全性,高并发方面都无法满足实际需求 配置多台主从数据库服务器以实现读写分离 读写分离,主数据库的…...
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点每次在终端敲入docker ps、docker stop、docker rm时,你是否想过——当容器数量超过两位数,这种重复劳动是否在消耗你的生命?去年我们团队在迁移微服务架…...
BurpSuite 2025插件开发JDK版本兼容性实战指南
1. 为什么BurpSuite插件开发环境总在JDK版本上翻车?你是不是也经历过:下载好BurpSuite最新版2025.4,兴冲冲打开插件开发文档,照着官方示例写完第一个HelloWorld插件,一编译——java.lang.UnsupportedClassVersionError…...
学术写作创新突破!2026全流程AI论文工具精选指南
2026 年 AI 论文写作工具已进入全流程闭环 学术合规时代,千笔 AI(综合评分 99 分)中文学术场景标杆;Grammarly Academic与Elicit为英文论文写作首选;按需求匹配度 - 数据可信度 - 成本承受力三维模型选型,…...
如何进行TVA仿真引擎的“光照地狱”训练?
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
翻译 GDB 官方文档
翻译 GDB 官方文档项目地址官方文档地址下载源码包编译html运行翻译程序项目地址 https://github.com/shootercheng/gdb-translate.git 项目结构 $ tree -L 1 . ├── cmd ├── go.mod ├── input ├── internal ├── LICENSE ├── output ├── README.md ├─…...
交流电机驱动器的三种控制模式:前沿切相、后沿切相与同步模式详解
1. 项目概述:一个能玩出花的交流电机驱动器在汽车改装、工业控制或者一些创客项目里,驱动一个交流电机听起来简单,但想让它听话地变速、正反转,甚至实现软启动和精确同步,往往就得搬出笨重又昂贵的工业变频器。今天分享…...
Qri高级功能:如何使用JSON Schema验证和描述数据集结构
Qri高级功能:如何使用JSON Schema验证和描述数据集结构 【免费下载链接】qri youre invited to a data party! 项目地址: https://gitcode.com/gh_mirrors/qr/qri Qri是一个强大的开源数据协作工具,它提供了丰富的功能来帮助用户管理、共享和验证…...
OpenRASP原理与实战:Java应用层实时防护技术详解
1. 为什么我宁愿花三天部署OpenRASP,也不愿再写第五个自定义WAF过滤器去年冬天,我在给一家做在线教育SaaS平台做安全加固时,连续踩了三个坑:第一次用NginxLua写了套SQL注入规则,结果学生提交的“SELECT * FROM courses…...
LPCM框架:大模型驱动的计算机架构设计革命
1. LPCM框架:计算机系统架构设计的范式革命计算机系统架构设计正站在历史性的转折点上。过去八十年来,从ENIAC的真空管到现代7纳米制程的异构计算芯片,架构设计始终遵循着"专家经验EDA工具"的传统范式。但随着摩尔定律逼近物理极限…...
ModernWMS核心功能详解:从ASN入库到Dispatch出库的完整工作流
ModernWMS核心功能详解:从ASN入库到Dispatch出库的完整工作流 【免费下载链接】ModernWMS The open source simple and complete warehouse management system is derived from our many years of experience in implementing erp projects. We stripped the origin…...
