news 2026/4/20 7:26:18

Selenium自动化测试:从零搭建Pycharm+Anaconda+Chrome环境(实战网页点击)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Selenium自动化测试:从零搭建Pycharm+Anaconda+Chrome环境(实战网页点击)

1. 环境准备:三件套的安装与配置

刚开始接触Selenium自动化测试时,最让人头疼的就是环境搭建。我自己第一次配置时,光是版本兼容问题就折腾了大半天。不过别担心,跟着我的步骤走,保证你能在半小时内搞定所有前置工作。

1.1 浏览器与驱动配对

Chrome浏览器和chromedriver就像一对双胞胎,必须保持版本一致才能正常工作。这里有个小技巧:先打开Chrome地址栏输入chrome://version/,你会看到类似"114.0.5735.199"的版本号(前三位最重要)。然后去淘宝NPM镜像站下载对应版本的驱动,这个镜像站速度比官网快很多。

下载后解压时要注意:建议直接把chromedriver.exe放到Chrome安装目录(通常是C:\Program Files\Google\Chrome\Application),这样后续引用路径会简单很多。我遇到过不少新手把驱动放在项目目录导致路径引用错误的情况,所以这个步骤千万别偷懒。

1.2 Anaconda的科学安装法

很多教程会建议你勾选"Add to PATH"选项,但根据我的经验,这经常会导致conda命令冲突。更稳妥的做法是安装时不勾选这个选项,装完后手动将以下路径加入系统环境变量:

  • C:\Users[你的用户名]\anaconda3
  • C:\Users[你的用户名]\anaconda3\Scripts
  • C:\Users[你的用户名]\anaconda3\Library\bin

安装完成后,在开始菜单找到"Anaconda Prompt",用管理员身份运行。输入conda --version能显示版本号就说明安装成功了。这里有个坑要注意:如果系统原来装有Python,可能会遇到conda命令不识别的情况,这时需要检查环境变量优先级。

1.3 Pycharm的优化配置

专业版虽然收费,但对自动化测试支持更好。安装时建议勾选"Add launchers dir to the PATH"和"Add Open Folder as Project"这两个选项。首次启动时会出现导入设置的弹窗,选择"Do not import settings"最干净。

有个实用小技巧:进入File->Settings->Appearance & Behavior->System Settings,关闭"Reopen projects on startup",这样每次启动不会自动打开上次项目,避免多个项目环境混淆。我刚开始做自动化时就因为这个问题浪费了不少时间排查环境冲突。

2. 虚拟环境搭建:隔离的测试空间

2.1 创建专属Python环境

在Anaconda Prompt中执行:

conda create -n autotest python=3.9

这里python=3.9不是随便选的版本。经过多次测试,我发现3.9版本在Selenium兼容性上最稳定。创建完成后,激活环境记得用:

conda activate autotest

而不是旧的source activate命令。

2.2 关键依赖安装

除了基本的selenium包,我强烈建议安装这几个辅助包:

pip install webdriver-manager selenium-wire pytest

webdriver-manager能自动管理浏览器驱动版本,selenium-wire可以监控网络请求,pytest则是更好的测试框架。曾经有个项目因为没装这些辅助包,导致调试效率低了50%。

2.3 环境验证测试

新建test_env.py文件,写入:

import selenium print(selenium.__version__)

运行后能正常输出版本号说明环境OK。如果报错,90%的问题出在环境变量或虚拟环境未正确激活。我习惯在项目根目录放这样一个验证脚本,每次切换环境都先跑一遍。

3. 开发环境联调:Pycharm的魔法组合

3.1 项目配置技巧

新建项目时,在"Location"处建议使用全英文路径。重点来了:在"Python Interpreter"选择时,点击右侧齿轮选择"Add Local Interpreter",然后找到Anaconda安装目录下的envs/autotest/python.exe。

有个容易忽略的设置:进入File->Settings->Tools->Python Integrated Tools,将"Default test runner"改为pytest。这样后续写测试用例会更方便。

3.2 调试配置优化

建议专门配置一个调试模板:

  1. 点击Add Configuration
  2. 选择Python
  3. 在"Before launch"部分添加"Activate Conda Environment"
  4. 勾选"Emulate terminal in output console"

这样设置后,调试时会自动激活conda环境,避免出现模块导入错误。我曾经因为没做这个配置,导致明明环境里有包却提示找不到,浪费了两小时。

4. 实战网页点击:从脚本到测试用例

4.1 基础点击脚本实现

先看一个完整的弹窗点击示例:

from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://example.com") try: element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable(("id", "popup-btn")) ) element.click() alert = WebDriverWait(driver, 5).until(EC.alert_is_present()) alert.accept() finally: driver.quit()

这段代码比原始教程的更健壮,加入了等待机制。实际项目中,我发现不加等待直接点击的成功率不到60%。

4.2 进阶:封装成测试类

更专业的做法是封装成测试类:

import unittest from selenium import webdriver class TestPopupClick(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome() def test_popup_click(self): self.driver.get("http://example.com") btn = self.driver.find_element("id", "popup-btn") btn.click() self.assertTrue(self.driver.switch_to.alert) @classmethod def tearDownClass(cls): cls.driver.quit()

用unittest框架能让测试更规范,也方便生成测试报告。我在实际项目中发现,这种结构化的代码维护成本能降低70%。

4.3 常见问题解决方案

问题1:元素找不到?

  • 解决方案:改用更稳定的定位方式,如:
find_element("css selector", "button[data-test='submit']")

问题2:弹窗不出现?

  • 解决方案:调整等待策略,可以组合使用:
WebDriverWait(driver, 10).until( lambda d: d.execute_script("return jQuery.active == 0") )

问题3:跨iframe操作?

  • 解决方案:先切换iframe上下文:
driver.switch_to.frame("iframe-name") # 操作元素 driver.switch_to.default_content()

5. 工程化扩展:让脚本更专业

5.1 配置文件管理

建议单独创建config.py存放配置:

class Config: CHROME_PATH = "C:/path/to/chromedriver" BASE_URL = "http://test-site.com" WAIT_TIMEOUT = 15

然后在测试脚本中引入配置。这样做的好处是环境变更时只需改一个文件。我接手过一个项目,因为没做配置分离,改个URL要在20个文件里搜索替换。

5.2 日志记录技巧

在项目根目录添加logging.conf配置文件:

[loggers] keys=root [handlers] keys=fileHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=fileHandler [handler_fileHandler] class=FileHandler level=DEBUG formatter=simpleFormatter args=('test.log', 'a') [formatter_simpleFormatter] format=%(asctime)s - %(levelname)s - %(message)s

然后在代码中初始化:

import logging.config logging.config.fileConfig('logging.conf') logger = logging.getLogger(__name__)

5.3 持续集成准备

创建requirements.txt:

selenium==4.0.0 webdriver-manager==3.8.5 pytest==7.1.2

再添加一个简单的Jenkinsfile:

pipeline { agent any stages { stage('Test') { steps { bat 'conda activate autotest && pytest tests/' } } } }

这套配置能让你的测试脚本直接接入CI/CD流程。去年我们团队通过这种标准化,将回归测试时间从4小时缩短到30分钟。

6. 最佳实践与避坑指南

6.1 元素定位的黄金法则

经过上百个测试脚本的验证,我总结出元素定位的优先级:

  1. 专属data-test属性(最稳定)
  2. CSS选择器(性能最好)
  3. XPath(最后选择)

绝对要避免使用动态生成的class或id。曾经有个项目因为用了".btn-primary"这样的class定位,前端改样式后200多个测试用例全挂了。

6.2 等待策略优化

混合等待策略效果最好:

# 显式等待+隐式等待结合 driver.implicitly_wait(5) # 全局等待 element = WebDriverWait(driver, 10).until( # 局部等待 EC.presence_of_element_located(("id", "dynamic-element")) )

6.3 测试数据管理

推荐使用Faker库生成测试数据:

from faker import Faker fake = Faker() test_user = { "name": fake.name(), "email": fake.email(), "phone": fake.phone_number() }

这样既能保证数据随机性,又避免了硬编码。有个电商项目用这种方法,测试覆盖率直接从60%提升到了85%。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 7:21:25

从RSA到ed25519:详解ssh-keygen生成密钥对的实战与演进

1. 为什么我们需要关注SSH密钥类型的选择 第一次接触SSH密钥时,很多人都会直接使用默认的RSA算法,毕竟它已经存在了这么多年,看起来足够安全可靠。但当我开始深入研究加密算法时,才发现密钥类型的选择远比想象中重要。就像我们不会…

作者头像 李华
网站建设 2026/4/20 7:21:21

mysql如何查看执行过的SQL记录_开启审计日志插件功能

MySQL社区版默认不记录SQL,需用general_log临时排查或安装server_audit插件实现审计;企业版才原生支持audit_log插件。MySQL 默认不记录执行过的 SQL,必须手动开启审计日志插件MySQL 社区版默认完全不保存历史 SQL 记录,general_l…

作者头像 李华
网站建设 2026/4/20 7:18:17

AI-比赛-第六届全国工业互联网数据创新应用大赛:工业生产反应装置的建模预测【天池】

赛题背景 在流程工业中,生产装置将不同原料经过物理或化学反应加工成高附加值产物。在化工领域,这个转变一般是由各类反应器负责完成的。反应装置通过复杂的一系列化学反应,把进料转化为一定浓度的目标产物。生产产物的浓度是生产产物的关键…

作者头像 李华
网站建设 2026/4/20 7:16:42

深入理解reFlutter核心组件:引擎哈希与快照分析原理

深入理解reFlutter核心组件:引擎哈希与快照分析原理 【免费下载链接】reFlutter Flutter Reverse Engineering Framework 项目地址: https://gitcode.com/gh_mirrors/re/reFlutter reFlutter作为一款专业的Flutter逆向工程框架,其核心功能依赖于对…

作者头像 李华
网站建设 2026/4/20 7:15:31

SublimePicker自定义验证规则实现:确保日期时间有效性

SublimePicker自定义验证规则实现:确保日期时间有效性 【免费下载链接】SublimePicker A material-styled android view that provisions picking of a date, time & recurrence option, all from a single user-interface. 项目地址: https://gitcode.com/g…

作者头像 李华