任务一:录制并回放GitHub搜索操作
Edge浏览器selenium IDE插件下载地址:
Selenium IDE - Microsoft Edge Addons
任务二:验证搜索结果标题(检查点)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time# 打开Edge
driver = webdriver.Edge()
driver.get("https://github.com")# 等待页面加载
time.sleep(2)# 点击搜索框区域并输入关键词
search_area = driver.find_element(By.CSS_SELECTOR, "div.search-input-container")
search_area.click()
time.sleep(1)search_box = driver.find_element(By.ID, "query-builder-test")
search_box.send_keys("Selenium")
search_box.send_keys(Keys.ENTER)# 等待搜索结果加载
time.sleep(3)# 新的检查点:检查页面是否有搜索结果(比检查标题更稳定)
if "No results matched" in driver.page_source:print("❌ 检查点失败:未找到搜索结果!")driver.quit()exit(1)
else:print("✅ 检查点验证成功!找到搜索结果。")driver.quit()
任务三:参数化测试(多关键词搜索)
import csv
import random
import pytest
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdef 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):driver = webdriver.Edge()driver.get("https://github.com")wait = WebDriverWait(driver, 10)# 点击搜索按钮,展开输入框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")))# 输入关键词并提交search_box.send_keys(data["keyword"])search_box.submit()# 根据预期结果验证if data["expected_result"] == "有结果":assert "Your search did not match any" not in driver.page_sourceelse:try:# 使用XPath检查是否存在 "没有匹配的仓库" 提示wait.until(EC.presence_of_element_located((By.XPATH, "//h3[contains(text(), 'Your search did not match any')]")))# 如果找到了该提示元素,说明没有结果no_result = Trueexcept:# 如果没有找到该提示元素,说明有结果no_result = False# 断言结果是否符合预期assert no_result, f"预期无结果,但搜索 '{data['keyword']}' 显示有结果。"driver.quit()# 延时,防止触发访问限制time.sleep(random.randint(0, 10))
