import csv
import pytest
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 EC
from webdriver_manager.firefox import GeckoDriverManager
def read_csv():
with open('search_data.csv', 'r') as f:
return list(csv.DictReader(f))
@pytest.fixture
def driver():
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
yield driver
driver.quit()
@pytest.mark.parametrize("data", read_csv())
def test_search(data, driver):
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"] == "有结果":
# 等待结果加载
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".repo-list-item"))
)
results = driver.find_elements(By.CSS_SELECTOR, ".repo-list-item")
assert len(results) > 0, "预期找到结果,但未找到"
else:
# 等待无结果提示
WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, ".blankslate"))
)
error_message = driver.find_element(By.CSS_SELECTOR, ".blankslate").text
assert "No results matched" in error_message, "预期无结果,但找到了结果"