4月23日
实验项目名称:实验六
一、实验目的
1、掌握 Selenium 自动化测试环境搭建
2、学习录制与回放测试脚本
3、实现检查点验证与参数化测试
二、实验内容
实验前准备
l 安装Firefox浏览器
1. 访问 [Firefox官网](https://www.mozilla.org/firefox/)。
2. 点击 “下载Firefox” → 运行安装程序 → 完成安装。
3. 打开Firefox,确保能正常访问网页(如百度)。
决定使用edge浏览器
l 安装Selenium IDE(录制回放工具)
- 打开Firefox浏览器,访问Selenium IDE插件页面(https://addons.mozilla.org/firefox/addon/selenium-ide/)。
2. 点击 “添加到Firefox” → 确认安装 → 安装完成后,右上角出现红色“S”图标。
注意:如果安装失败,检查网络或尝试重启浏览器。
在edge中查找Selenium IDE扩展并进行安装
任务一:录制并回放GitHub搜索操作
目标:录制“搜索GitHub仓库”的操作,并自动回放。
l 步骤1:启动Selenium IDE并创建项目
1. 点击Firefox右上角红色“S”图标 → 点击 “Create New Project”。
2. 输入项目名称(例如 GitHubSearch),在 “Base URL” 输入https://github.com。
3. 点击 “Start Recording” 开始录制。
l 步骤2:录制搜索操作
1. Firefox自动打开GitHub首页,在搜索框输入 Selenium,按回车键搜索。
2. 页面跳转至搜索结果页后,返回Selenium IDE界面,点击 “Stop Recording”。
注意:操作时不要关闭Selenium IDE窗口。
l 步骤3:回放脚本
1. 点击Selenium IDE中的 “Run current test” 按钮(绿色三角形图标)。
2. 观察浏览器是否自动执行搜索操作,并检查日志区是否显示 “Passed”(绿色标记)。
失败排查:
- 如果回放失败,检查搜索框的name属性是否为q(右键搜索框 → 检查元素 → 查看name值)
自动执行搜索操作并且成功
任务二:验证搜索结果标题(检查点)
目标:编写脚本检查GitHub搜索结果的标题是否包含关键词。
l 步骤1:安装Python和Selenium库
1. 安装Python:
- 访问 [Python官网](https://www.python.org/downloads/),下载最新版本。
- 运行安装程序,务必勾选 “Add Python to PATH” → 完成安装。
2. 验证安装:
- 按 Win + R 输入 cmd → 输入 python --version,显示版本号即成功。
3. 安装Selenium库:
- 在CMD中输入以下命令:
bash
pip install selenium webdriver-manager
因为之前就有python,直接进行验证
安装成功。
l 步骤2:编写检查点脚本
1. 打开记事本(或VSCode等编辑器),复制以下代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.firefox import GeckoDriverManager
# 自动启动Firefox浏览器
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://github.com")
# 搜索关键词"Selenium"
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium")
search_box.submit()
# 检查标题是否包含"Selenium"
assert "Selenium" in driver.title, "❌ 检查点失败:标题缺少关键词!"
print("✅ 检查点验证成功!")
driver.quit() # 关闭浏览器2. 保存文件为 github_test.py(注意后缀是 .py)。
代码解释:
- driver = webdriver.Firefox(...):自动下载驱动并打开浏览器。
- assert "Selenium" in driver.title:如果标题不包含关键词,报错并停止脚本。
首先对代码进行修改,改为自动启动edge浏览器的代码,如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
# 自动启动Edge浏览器
service = Service(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)
driver.get("https://github.com")
# 搜索关键词"Selenium"
# 等待页面完全加载
time.sleep(2)
wait = WebDriverWait(driver, 15)
# 直接使用快捷键打开搜索
print("尝试使用快捷键打开搜索...")
driver.find_element(By.TAG_NAME, "body").send_keys("/")
time.sleep(1)
# 输入搜索关键词
try:
# 等待搜索框出现
search_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='query-builder-test'], input[data-target='query-builder.input'], input[aria-label='Search GitHub']")))
search_input.clear()
search_input.send_keys("Selenium")
search_input.send_keys(Keys.ENTER)
print("搜索成功提交")
# 等待搜索结果页面加载
time.sleep(3)
except Exception as e:
print(f"搜索失败: {e}")
# 保存截图以便调试
driver.save_screenshot("github_search_error.png")
print("已保存错误截图以便调试")
# 检查搜索结果页面
try:
# 等待页面加载完成
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".codesearch-results, .search-title")))
print(f"当前页面标题: {driver.title}")
# 检查是否在搜索结果页面
if "search results" in driver.title.lower() or "搜索结果" in driver.title:
print("✅ 检查点验证成功:已进入搜索结果页面!")
else:
# 检查页面内容是否包含Selenium
page_text = driver.find_element(By.TAG_NAME, "body").text
if "Selenium" in page_text:
print("✅ 检查点验证成功:页面内容包含Selenium!")
else:
print("❌ 检查点失败:页面内容不包含搜索关键词!")
driver.save_screenshot("search_result.png")
except Exception as e:
print(f"❌ 检查点失败:{e}")
print(f"当前页面标题: {driver.title}")
driver.save_screenshot("search_result.png")
print("已保存搜索结果截图以便调试")
driver.quit() # 关闭浏览器
l 步骤3:运行脚本
1. 在CMD中进入脚本所在目录(例如文件在桌面):
bash
cd Desktop
python github_test.py
2. 预期结果:
- 浏览器自动打开GitHub并搜索 → 控制台显示 “✅ 检查点验证成功!”。
任务三:参数化测试(多关键词搜索)
目标:用不同关键词测试搜索结果的正确性。
l 步骤1:准备测试数据文件
1. 右键桌面 → 新建文本文档 → 输入以下内容:
csv
keyword,expected_result
Selenium,有结果
InvalidKeyword123,无结果
2. 保存文件为 search_data.csv(后缀改为 .csv)。
l 步骤2:编写参数化脚本
1. 新建文件 github_param_test.py,复制以下代码:
import csv
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.firefox import GeckoDriverManager
def read_csv():
with open('search_data.csv', 'r') as f:
return list(csv.DictReader(f))
@pytest.mark.parametrize("data", read_csv())
def test_search(data):
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://github.com")
# 输入关键词并搜索
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys(data["keyword"])
search_box.submit()
# 根据预期结果验证
if data["expected_result"] == "有结果":
assert "No results matched" not in driver.page_source
else:
assert "No results matched" in driver.page_source
driver.quit()
需要修改下代码,代码如下:
import csv
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
import random
def read_csv():
with open('search_data.csv', 'r', encoding='utf-8') as f:
return list(csv.DictReader(f))
@pytest.mark.parametrize("data", read_csv())
def test_search(data):
service = Service(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)
driver.get("https://github.com")
wait = WebDriverWait(driver, 15)
# 添加随机延迟(2-5秒)模拟人类操作
time.sleep(random.uniform(2, 5))
# 直接使用快捷键打开搜索
driver.find_element(By.TAG_NAME, "body").send_keys("/")
# 添加随机延迟(1-3秒)模拟人类操作
time.sleep(random.uniform(1, 3))
try:
search_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='query-builder-test'], input[data-target='query-builder.input'], input[aria-label='Search GitHub']")))
search_input.clear()
search_input.send_keys(data["keyword"])
search_input.send_keys(Keys.ENTER)
# 添加随机延迟(3-8秒)模拟人类浏览搜索结果
time.sleep(random.uniform(3, 8))
except Exception as e:
driver.save_screenshot("github_search_error.png")
assert False, f"搜索框异常: {e}"
# 检查搜索结果
page_source = driver.page_source
# 先检查是否遇到速率限制
if "Rate limit" in page_source:
assert False, "遇到GitHub速率限制,请稍后再试"
# 检查搜索结果
try:
# 检查搜索结果
try:
# 判断页面上是否存在代表有结果的主要元素
has_result_element = False
try:
driver.find_element(By.CSS_SELECTOR, '[data-testid="results-list"], .search-title, .codesearch-results')
has_result_element = True
except Exception:
has_result_element = False
if data["expected_result"] == "有结果":
assert has_result_element, "期望有结果,但页面未找到代表有结果的主要元素"
else:
assert not has_result_element, "期望无结果,但页面存在代表有结果的主要元素"
except Exception as e:
driver.save_screenshot("github_search_error.png")
assert False, f"搜索结果判断异常: {e}"
finally:
driver.quit()
l 步骤3:执行测试
1. 在CMD中输入:
bash
pip install pytest # 仅首次需要安装
pytest github_param_test.py -v
2. 预期输出:
plaintext
============== test session starts ==============
collected 2 items
github_param_test.py::test_search[Selenium-有结果] PASSED
github_param_test.py::test_search[InvalidKeyword123-无结果] PASSED

浙公网安备 33010602011771号