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

【软测】脚本实现 - 网页自动化测试

目录

脚本实现 - 网页自动化测试

提要

两个web自动化测试的python脚本分析

任务目标

具体要求

任务1

效果

任务2

效果


说明:本系列软测基础实操内容网站等选用自黑马传智教育内的公开学习内容

传智 | 高校学习平台-首页

黑马在IT领域的教学内容非常丰富,使用入门、进阶等不同学习阶段的学习,推荐大家多多浏览学习

提要:

Web 自动化测试借助 Selenium 操控浏览器模拟用户操作,XPath 精准定位页面元素,pytest 框架组织管理测试用例、实现参数化与断言。三者协同实现从元素定位、操作到用例执行的自动化流程,提升回归测试效率,减少人工重复劳动,保障软件功能稳定性,适用于需求稳定、需多浏览器兼容的测试场景。

脚本实现 - 网页自动化测试

提要

自动化测试实施前提与策略

适用场景条件需求稳定:项目需求变动不频繁,避免因频繁更新导致测试脚本维护成本过高

时间充足:预留足够时间设计框架、编写与调试脚本,确保自动化测试的质量

脚本复用性:测试脚本可在多种浏览器或平台重复运行,提升投入产出比

测试策略金字塔模型:遵循 “单元测试(白盒)→接口测试→UI 测试” 的金字塔结构,优先开展底层测试

回归测试导向:主要用于回归测试,验证已有功能的稳定性,而非新功能开发测试。

核心技术分类与特点

录制与回放技术原理:通过工具记录人工操作流程,自动生成脚本并回放

优缺点:

优点:实现效率高、学习成本低,适合快速生成简单脚本

缺点:维护成本高(页面变动需重录)、脚本复用性低

脚本技术线性脚本:直接录制操作流程,包含点击、输入等动作,可完整回放

结构化脚本:引入顺序、分支、循环等逻辑结构,支持函数调用,灵活测试复杂功能

共享脚本:封装通用功能(如登录),供多个测试用例调用,减少重复代码

数据驱动技术原理:将测试数据与脚本分离,通过不同数据文件驱动同一脚本执行不同用例

扩展:关键字驱动:进一步分离界面元素、操作逻辑与测试数据,提升代码可维护性

行为驱动:基于业务场景设计用例,需开发、测试、产品协作,聚焦软件内部运作。

Selenium 工具核心应用

pip install selenium

元素定位方法(8 种)基础定位:id、name、class_name、tag_name

文本定位:link_text(全文本)、partial_link_text(部分文本)

高级定位:xpath(路径定位)、css_selector(CSS 选择器)

元素操作与浏览器控制元素操作:send_keys()(输入)、click()(点击)、clear()(清空)、submit()(提交表单)

浏览器操作:get(url)(打开页面)、maximize_window()(窗口最大化)、close()/quit()(关闭窗口)

等待策略强制等待:time.sleep(seconds),固定休眠时间,影响效率,仅用于调试

隐式等待:implicitly_wait(timeout),全局设置最长等待时间,未找到元素时循环尝试

显式等待:WebDriverWait(driver, timeout).until(condition),针对特定元素等待,需结合By模块与条件函数。

自动化测试框架应用

pytest 框架核心要点用例规范:测试类以Test开头,方法以test_开头,不包含__init__方法

固件(Fixture):模块级:setup_module/teardown_module,模块运行前后各执行一次

类级:setup_class/teardown_class(需加@classmethod装饰器),类运行前后各执行一次

方法级:setup_method/teardown_method,每个方法运行前后执行

断言方式:直接使用 Python 的assert关键字,支持assert a == b、assert a in b等表达式

数据驱动与参数化通过@pytest.mark.parametrize装饰器实现参数化测试,传入不同数据执行同一用例。

实战关键步骤

环境搭建安装 Python 解释器、PyCharm IDE、Selenium 库。

下载对应浏览器驱动(如 Chrome 的chromedriver),确保版本与浏览器匹配。

元素定位实战使用浏览器开发者工具(F12)或 Katalon Recorder 插件获取元素属性(id、class、xpath 等)。

优先使用唯一属性(如 id)定位,避免tag_name等非唯一标识。

功能测试流程登录 / 退出测试:定位账号密码输入框→输入数据→点击登录→断言跳转结果→点击退出并验证。

页面跳转测试:定位导航链接→点击跳转→通过driver.current_url或页面元素断言目标页面。

异常处理与日志使用try-except捕获元素定位异常,结合get_screenshot_as_file()保存错误截图。

集成日志框架(如 Python 的logging)记录测试过程,便于问题排查。

两个web自动化测试的python脚本分析

提供一些应用于测试的网站:

禅道:

用户登录 - 禅道

学习在线

学成在线2.0

任务目标

编写一个自动化测试脚本,模拟用户登录禅道系统

用户登录 - 禅道)的完整流程,并验证登录结果。

具体要求

1.环境与工具

使用 Selenium 库操作 Chrome 浏览器完成自动化测试。

2.操作流程

启动 Chrome 浏览器并访问禅道系统登录页面

用户登录 - 禅道)。

最大化浏览器窗口,确保页面元素完整显示。

设置隐式等待时间(10 秒),确保页面元素加载完成后再操作。

3.登录操作

定位用户名输入框(要求:通过 XPath 定位,元素 id 为account),清空默认内容后输入用户名demo,输入前后各等待 2 秒(模拟用户输入节奏)。

定位密码输入框(要求:通过 XPath 定位,元素 id 为password),清空默认内容后输入密码quickon4You,输入前后各等待 2 秒。

定位登录按钮(要求:通过 XPath 定位,元素 id 为submit),点击登录,登录后等待 4 秒(确保页面跳转完成)。

4.结果验证

登录成功后,截取当前页面并保存为./登录成功.png(验证登录结果)。

5.资源释放

完成所有操作后关闭浏览器,并输出ok提示脚本执行结束。

任务1

1.1.脚本需具备基本的稳定性:通过implicitly_wait和time.sleep结合,避免因元素未加载

1.2.完成导致的定位失败。

1.3.操作需模拟真实用户行为:输入前后添加固定等待时间(2 秒),接近人工输入节奏。

结果可追溯:通过截图保存登录成功的页面状态,作为验证依据。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By  # 虽然未使用,但保留导入driver = webdriver.Chrome()
driver.get('https://zentao.demo.qucheng.cc/')# 窗口最大化
driver.maximize_window()# 设置隐式时间
driver.implicitly_wait(10)
time.sleep(2)# 1. 输入手机号 css进行定位 [type="text"](实际是用户名,id为account)
driver.find_element_by_xpath('//*[@id="account"]').clear()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="account"]').send_keys('demo')
time.sleep(2)# 输入密码(id为password)
driver.find_element_by_xpath('//*[@id="password"]').clear()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="password"]').send_keys('quickon4You')
time.sleep(2)# 点击登录(id为submit)
driver.find_element_by_xpath('//*[@id="submit"]').click()
time.sleep(4)# 保存页面
driver.get_screenshot_as_file('./登录成功.png')# 关闭浏览器
print('ok')
driver.close()
效果

任务2

账户名 el-form-item__content

密码 el-form-item__content

打开学成在线2.0

输入账号、密码和截图时需要加上2s停顿时间

2.1.登录成功截图

2.2.弹出退出登录信息,并点击退出登录按钮 退出登录成功截图

from selenium.webdriver import ActionChains

2.3.点击返回首页操作

import time
from selenium.webdriver.support import expected_conditions as ECfrom selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait# from selenium.webdriver.common.by import By # 虽然未使用,但保留导入driver = webdriver.Chrome()
driver.get('http://xczx2-portal.itheima.net/')# 窗口最大化
driver.maximize_window()# 设置隐式时间
driver.implicitly_wait(10)
time.sleep(1)# 1. 输入手机号 css进行定位 [type="text"](实际是用户名,id为account)
# driver.find_element_by_xpath('//*[@id="account"]').clear()
# time.sleep(2)
# driver.find_element_by_xpath('//*[@id="account"]').send_keys('demo')
# time.sleep(2)
driver.find_element_by_link_text("登录").click()username = driver.find_element_by_xpath("/html/body/div/div/div[3]""/form/div[1]/div/div/input")username.clear()username.send_keys("13810000002")
time.sleep(2)
# 输入密码(id为password)
# driver.find_element_by_xpath('//*[@id="password"]').clear()
# time.sleep(2)
# driver.find_element_by_xpath('//*[@id="password"]').send_keys('quickon4you')
# time.sleep(2)
password = driver.find_element_by_xpath("/html/body/div/div/div[3]""/form/div[2]/div/div/input")password.clear()password.send_keys("888itcast.CN764%...")
time.sleep(2)driver.find_element_by_class_name("el-button--primary").click()
driver.get_screenshot_as_file('./登录成功.png')time.sleep(2)menu_item = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#headerContainer > nav > div.sign-in > div.dropdown.myInfo > div.dropbtn > span"))
)# 悬停到菜单项
actions = ActionChains(driver)
actions.move_to_element(menu_item).perform()# 等待下拉菜单中的选项加载完成
dropdown_option = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#btnLogout"))
)
# time.sleep(3)
# 点击下拉菜单中的选项
dropdown_option.click()# 等待一段时间,观察效果
time.sleep(2)# driver.find_element_by_class_name("glyphicon-log-out").click()
print("成功退出学成在线教育平台")
# 保存页面
driver.get_screenshot_as_file('./注销成功.png')# 关闭浏览器
print('ok')
driver.close()

效果

相关文章:

  • 搜索问答技术概述:基于知识图谱与MRC的创新应用
  • rt-thread的定时器驱动(裸机版本)记录.
  • Ubuntu中Chromium无法使用Fcitx输入中文的问题
  • 设计师灵感仓库!IconViewer 右键一键提取系统图标,PNG 透明背景素材随取随用
  • AORSA关键文件及参数解释
  • 「AI投资」| 国元证券: 《国产Agent不断演进,通用协议推进系统性应用-AI行业专题报告》
  • App跨平台技术2025年深度解析:核心原理与最佳实践
  • linux-压缩类命令
  • MySQL 究极奥义·动态乾坤大挪移·无敌行列转换术
  • 二维码识别深度解析
  • Python爬虫实战:研究RQ库相关技术
  • 【 (MCMC算法)“马尔可夫链 + 蒙特卡洛 = 黑科技采样术”| 零基础也能学懂!】
  • 逆向入门(5)程序逆向篇-AD_CM#2
  • 【八股消消乐】构建微服务架构体系—实现制作库与线上库分离
  • 再参数化视角下的批量归一化:缩放平移操作的本质意义
  • python与java的区别
  • Appium + Ruby 测试全流程
  • Java线程转储:快速定位死锁与阻塞
  • Kubernetes镜像拉取认证指南
  • BeckHoff PLC --> 料筐(KLT Box)自动对中与抓取程序分析
  • 华威桥网站建设/seopeix
  • 视频解析网站制作/优化英文
  • 十堰市茅箭区建设局网站/上海seo优化公司kinglink
  • 网站建设需求调研/免费发帖平台
  • 做医院网站/百家港 seo服务
  • wordpress免登录评论/整站外包优化公司