【软测】脚本实现 - 网页自动化测试
目录
脚本实现 - 网页自动化测试
提要
两个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()