4.21
实验六 selenium工具测试
一、实验目的
1、掌握 Selenium 自动化测试环境搭建
2、学习录制与回放测试脚本
3、实现检查点验证与参数化测试
二、实验内容
实验前准备
l 安装Firefox浏览器
1. 访问 [Firefox官网](https://www.mozilla.org/firefox/)。
2. 点击 “下载Firefox” → 运行安装程序 → 完成安装。
- 打开Firefox,确保能正常访问网页(如百度)。
l 安装Selenium IDE(录制回放工具)
- 打开Firefox浏览器,访问Selenium IDE插件页面(https://addons.mozilla.org/firefox/addon/selenium-ide/)。
2. 点击 “添加到Firefox” → 确认安装 → 安装完成后,右上角出现红色“S”图标。
注意:如果安装失败,检查网络或尝试重启浏览器。
任务一:录制并回放GitHub搜索操作
目标:录制“搜索GitHub仓库”的操作,并自动回放。
l 步骤1:启动Selenium IDE并创建项目
- 点击Firefox右上角红色“S”图标 → 点击 “Create New Project”。
- 输入项目名称(例如 GitHubSearch),在 “Base URL” 输入https://github.com。
- 点击 “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值)
Name属性为query-built-test
任务二:验证搜索结果标题(检查点)
目标:编写脚本检查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
l 步骤2:编写检查点脚本
- 打开记事本(或VSCode等编辑器),复制以下代码:
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
# 指定 GeckoDriver 的实际路径
gecko_driver_path = r'C:\Users\Lenovo\Downloads\geckodriver-v0.36.0-win32\geckodriver.exe'
# 创建 Firefox 服务
firefox_service = Service(gecko_driver_path)
# 创建 Firefox 选项
firefox_options = Options()
firefox_options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
# 创建 Firefox 浏览器实例
driver = webdriver.Firefox(service=firefox_service, options=firefox_options)
driver.get("https://github.com")
try:
# 检查是否加载了 GitHub 页面
assert "GitHub" in driver.title, "❌ 检查点失败:未加载 GitHub 页面!"
# 确保页面完全加载
WebDriverWait(driver, 10).until(
lambda driver: driver.execute_script("return document.readyState") == "complete"
)
wait = WebDriverWait(driver, 20)
# 点击搜索按钮
search_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Search or jump to…']")))
search_button.click()
# 输入关键词并回车
search_input = wait.until(EC.presence_of_element_located((By.NAME, "query-builder-test")))
search_input.send_keys("Selenium" + Keys.RETURN)
# 等待页面跳转完成
WebDriverWait(driver, 20).until(EC.url_contains("/search"))
print("✅ 检查点验证成功!")
finally:
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,复制以下代码:
l   import csv
import codecs
import chardet
import random
import time
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
# 指定 GeckoDriver 的实际路径
gecko_driver_path = r'C:\Users\Lenovo\Downloads\geckodriver-v0.36.0-win32\geckodriver.exe'
# 创建 Firefox 服务
firefox_service = Service(gecko_driver_path)
# 创建 Firefox 选项
firefox_options = Options()
firefox_options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
# 创建 Firefox 浏览器实例
driver = webdriver.Firefox(service=firefox_service, options=firefox_options)
driver.get("https://github.com")
# 检测文件编码
def detect_encoding(file_path):
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
    return result['encoding']
encoding = detect_encoding('search_data.csv')
print(f"文件编码格式:{encoding}")
# 读取 CSV 文件
def read_csv():
    # 使用检测到的编码格式读取文件,并处理乱码
    with codecs.open('search_data.csv', 'r', encoding=encoding, errors='replace') as f:
        reader = csv.DictReader(f)
        for row in reader:
            # 跳过空行或格式不正确的行
            if not row or 'keyword' not in row or 'expected_result' not in row:
                continue
            # 处理列名中的空格和大小写
            yield {key.strip().lower(): value.strip() for key, value in row.items() if key and value}
search_data = list(read_csv())
print(search_data)  # 打印读取的 CSV 数据
try:
    # 检查是否加载了 GitHub 页面
    assert "GitHub" in driver.title, "❌ 检查点失败:未加载 GitHub 页面!"
    # 确保页面完全加载
    WebDriverWait(driver, 10).until(
        lambda driver: driver.execute_script("return document.readyState") == "complete"
    )
    wait = WebDriverWait(driver, 20)
    # 点击搜索按钮
    search_button = wait.until(
        EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Search or jump to…']"))
    )
    search_button.click()
    # 等待搜索框加载
    search_box = wait.until(
        EC.presence_of_element_located((By.NAME, "query-builder-test"))
    )
    # 从 CSV 文件中获取搜索关键字和预期结果
    for data in search_data:
        # 输入关键词并提交
        search_box.clear()
        search_box.send_keys(data["keyword"])
        search_box.submit()
        # 等待页面跳转完成
        WebDriverWait(driver, 20).until(EC.url_contains("/search"))
        # 根据预期结果验证
        if data["expected_result"] == "有结果":
            assert "Your search did not match any" not in driver.page_source
            print(f"✅ 检查点验证成功!搜索关键词:{data['keyword']}")
        else:
            try:
                # 使用 XPath 检查是否存在 "没有匹配的仓库" 提示
                wait.until(
                    EC.presence_of_element_located(
                        (By.XPATH, "//h3[contains(text(), 'Your search did not match any')]"))
                )
                # 如果找到了该提示元素,说明没有结果
                no_result = True
            except:
                # 如果没有找到该提示元素,说明有结果
                no_result = False
            # 断言结果是否符合预期
            assert no_result, f"预期无结果,但搜索 '{data['keyword']}' 显示有结果。"
            print(f"✅ 检查点验证成功!搜索关键词:{data['keyword']},预期无结果。")
        # 延时,防止触发访问限制
        time.sleep(random.randint(30, 60))
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号
浙公网安备 33010602011771号