Selenium+Python可通过 元素定位→操作模拟→断言验证 三步实现Web自动化测试

一、环境搭建(5分钟完成)

1. 安装依赖

复制代码
bash

# 安装Selenium库  
pip install selenium  

下载浏览器驱动(需与浏览器版本匹配):

2. 验证安装

复制代码
python

from selenium import webdriver  
# 启动Chrome浏览器  
driver = webdriver.Chrome()  
# 打开百度首页  
driver.get("https://www.baidu.com")   
# 关闭浏览器  
driver.quit()  

运行后若自动打开Chrome并访问百度,说明环境配置成功。

---

二、核心操作:模拟用户行为

1. 元素定位(8种常用方法)

|---------------------------|------------------|-------------------------------------------------------------|
| 方法 | 场景示例 | 代码示例 |
| find_element_by_id | 定位有id属性的元素(如搜索框) | driver.find_element_by_id("kw") |
| find_element_by_xpath | 复杂页面定位(如动态加载元素) | driver.find_element_by_xpath("//input[@name='username']") |
| find_element_by_link_text | 定位超链接文本 | driver.find_element_by_link_text("登录") |

2. 模拟用户操作

  • 输入文本 :send_keys()
复制代码
python

# 在百度搜索框输入“selenium”  
driver.find_element_by_id("kw").send_keys("selenium")  
  • 点击按钮 :click()
复制代码
python

# 点击百度搜索按钮  
driver.find_element_by_id("su").click()  
  • 键盘操作(需导入Keys):
复制代码
python

from selenium.webdriver.common.keys import Keys  
# 输入后按回车键(替代点击按钮)  
driver.find_element_by_id("kw").send_keys(Keys.ENTER)  
  • 鼠标悬停(需ActionChains):
复制代码
python

from selenium.webdriver.common.action_chains import ActionChains  
# 悬停到“设置”菜单  
setting = driver.find_element_by_link_text("设置")  
ActionChains(driver).move_to_element(setting).perform()  

---

三、实战案例:模拟电商网站登录

1. 测试用例

目标:自动输入用户名/密码,点击登录,验证是否跳转至首页。

前置条件:准备测试账号(testuser/testpwd123)。

2. 代码实现

复制代码
python

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  
 
# 1. 启动浏览器并打开登录页  
driver = webdriver.Chrome()  
driver.get("https://www.example.com/login")   # 替换为实际登录页URL  
driver.maximize_window()  # 最大化窗口  
 
# 2. 输入账号密码(显式等待元素加载,避免time.sleep)  
WebDriverWait(driver, 10).until(  
    EC.presence_of_element_located(("id", "username"))  
).send_keys("test_user")  
driver.find_element_by_id("password").send_keys("test_pwd123")  
 
# 3. 点击登录按钮  
driver.find_element_by_xpath("//button[@type='submit']").click()  
 
# 4. 验证登录结果(断言URL是否包含“home”)  
WebDriverWait(driver, 10).until(  
    EC.url_contains("home")  
)  
assert "home" in driver.current_url, "登录失败,未跳转至首页"  
 
# 5. 关闭浏览器  
driver.quit()  

---

四、提升效率:避免重复劳动

1. 显式等待(替代time.sleep)

复制代码
python

# 等待10秒,直到“首页欢迎语”出现  
welcome_text = WebDriverWait(driver, 10).until(  
    EC.presence_of_element_located(("id", "welcome"))  
)  
assert "欢迎回来" in welcome_text.text  

2. 封装成测试类(便于维护)

复制代码
python

import unittest  
 
class TestLogin(unittest.TestCase):  
    def setUp(self):  
        self.driver = webdriver.Chrome()  
 
    def test_login_success(self):  
        self.driver.get("https://www.example.com/login")   
        # 登录逻辑...  
 
    def tearDown(self):  
        self.driver.quit()  
 
if __name__ == "__main__":  
    unittest.main()  

3. 容器化部署(确保环境一致性)

通过智优达Docker容器化部署指南,将Selenium测试环境打包为Docker镜像,避免"本地能跑,服务器跑不了"的问题:

复制代码
dockerfile

# Dockerfile示例  
FROM python:3.9  
RUN pip install selenium  
COPY . /app  
CMD ["python", "/app/test_login.py"]  
相关推荐
小白马突突突3 小时前
零信脱敏正式提出“不过度脱敏”产品原则
人工智能·文件脱敏·文档脱敏·零信脱敏·pdf脱敏工具
Code_Solitude3 小时前
高数第一章函数笔记(原稿手写+AI识别优化)
人工智能·笔记
龙亘川3 小时前
面向绿色低碳城市:一网统管打通交通与能源治理的关键路径
大数据·人工智能·智慧城市·能源·开源软件
东莞市云毅网络有限公司3 小时前
结构化标注缺失怎么查:JSON-LD抽取与每日巡检脚本实现
python·sqlite·自动化运维·geo·数据监测
蓝悦无人机3 小时前
无人机系列之飞控算法:从PID到AI,飞行控制的核心进化
人工智能·算法·无人机·飞控系统
sarasuki3 小时前
Agent 是怎么做错误处理的呢?
人工智能·设计模式·agent
憨波个3 小时前
【说话人日志】DiariZen
人工智能·深度学习·算法·语音识别
付威20233 小时前
我用 100 行核心代码,做了一个能接入飞书的 Hermes 式智能体
人工智能·后端
IamZJT_3 小时前
拆开 DeepSeek Harness 10|创造模式在“创造”什么?让 Agent 组装一种新工作方式
人工智能
snakeshe10103 小时前
Python 入门核心:分支、循环、列表容器
人工智能