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在安全性,高并发方面都无法满足实际需求 配置多台主从数据库服务器以实现读写分离 读写分离,主数据库的…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
