Selenium 自动化测试入门

83 阅读2分钟

1. Selenium 简介

Selenium 是一款开源的 Web 自动化测试框架,主要用于编写自动化测试脚本来模拟用户在浏览器上的各种操作。它可以帮助测试工程师自动执行回归测试、功能测试以及性能测试。

核心组件:

WebDriver:驱动浏览器执行操作

IDE:录制和回放工具(适合简单场景)

支持浏览器:Chrome、Firefox、Edge、Safari 等

适用语言:Python、Java、C#、JavaScript 等

2. 环境搭建

Python 环境 安装selenium库

pip install selenium

浏览器驱动(以 Chrome 为例) 下载对应版本的 ChromeDriver

将驱动文件添加到系统 PATH,或通过代码指定路径:

from selenium import webdriver
driver = webdriver.Chrome(executable_path="path/to/chromedriver")

3. 基础使用

示例代码

from selenium import webdriver

# 初始化浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.baidu.com")

# 获取页面标题
print(driver.title)  # 输出:百度一下,你就知道

# 关闭浏览器
driver.quit()

4. 元素定位

常用定位方法

方法示例说明
find_element(By.ID)driver.find_element(By.ID,"wd")通过 ID 定位
find_element(By.NAME,)driver.find_element(By.NAME,"wd")通过 name 属性定位
find_element(By.XPATH)driver.find_element(By.XPATH,"//input[@id='kw']")XPath 定位
find_element(By.CSS_SELECTOR,)driver.find_element(By.CSS_SELECTOR,"#kw")CSS 选择器定位
find_element(By.CLASS_NAME)driver.find_element(By.CLASS_NAME,"s_ipt")通过 class 定位
find_element(By.LINK_TEXT)driver.find_element(By.LINK_TEXT,"新闻")通过链接文本定位
find_element(By.PARTIAL_LINK_TEXT)driver.find_element(By.PARTIAL_LINK_TEXT,"新闻")通过链接文本定位
find_element(By.TAG_NAME)driver.find_element(By.TAG_NAME,"a")通过标签名定位元素

5. 交互操作

常用方法

# 输入文本
search_box = driver.find_element_by_id("kw")
search_box.send_keys("Selenium教程")
# 点击按钮
search_button = driver.find_element_by_id("su")
search_button.click()
# 清空输入框
search_box.clear()
# 提交表单(针对表单元素)
search_box.submit()
# 获取元素属性
print(search_box.get_attribute("class"))
# 获取元素文本
link = driver.find_element_by_link_text("新闻")
print(link.text)  

6. 等待机制

隐式等待(全局等待)

driver.implicitly_wait(10)  # 最多等待10秒

显式等待(精确控制)

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "kw"))
)

7. 浏览器操作

常用方法

# 窗口最大化
driver.maximize_window()

# 后退/前进
driver.back()
driver.forward()

# 刷新页面
driver.refresh()

# 窗口切换
for handle in driver.window_handles:
    driver.switch_to.window(handle)

# 处理弹窗
alert = driver.switch_to.alert
alert.accept()  # 确认弹窗

8. 进阶技巧

执行 JavaScript

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

处理 Cookies

# 获取所有 cookies
cookies = driver.get_cookies()

# 添加 cookie
driver.add_cookie({"name": "test", "value": "123"})

截图与日志

driver.save_screenshot("screenshot.png")

Headless 模式(无界面)

options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

9. 注意事项

1.驱动版本:浏览器版本需与驱动版本匹配

2.元素定位失败:

检查是否加载完成(添加等待)

确认元素是否在 iframe 中(需要切换)

动态生成的元素可能需要重新定位

3.性能优化:减少不必要的等待和页面加载

4.反爬机制:部分网站会检测 Selenium,需谨慎使用