这篇补一个老生常谈但真的实用的东西:自动化脚本里的配置管理。
你可能也经历过——账号写死在代码里,切换环境靠注释改变量,想要换个登录参数得翻几百行脚本找地方改。后来我干脆用了一个 config.yaml
,把所有环境参数、账号密码、driver 路径等全抽出去,脚本就清爽太多了。
一、先定义 config.yaml
比如我有个 config/config.yaml
文件,内容如下:
env: dev
login:
username: admin
password: 123456
browser:
driver_path: ./chromedriver
headless: false
urls:
login_page: https://example.com/login
dashboard: https://example.com/dashboard
screenshot:
enabled: true
save_path: screenshots/
这个文件基本涵盖了一个自动化流程的所有可变项。
二、用 Python 加载配置文件
使用 PyYAML
来解析:
pip install pyyaml
封装一个读取方法 config_loader.py
:
import yaml
def load_config(path="config/config.yaml"):
with open(path, 'r', encoding='utf-8') as f:
return yaml.safe_load(f)
主程序调用:
from config_loader import load_config
config = load_config()
username = config["login"]["username"]
driver_path = config["browser"]["driver_path"]
三、在 Selenium 脚本中使用配置
初始化 driver:
from selenium import webdriver
options = webdriver.ChromeOptions()
if config["browser"]["headless"]:
options.add_argument("--headless")
driver = webdriver.Chrome(executable_path=config["browser"]["driver_path"],
options=options)
登录逻辑:
driver.get(config["urls"]["login_page"])
driver.find_element(By.ID, "user").send_keys(config["login"]["username"])
driver.find_element(By.ID, "pwd").send_keys(config["login"]["password"])
driver.find_element(By.ID, "submit").click()
保存截图(可控开关):
if config["screenshot"]["enabled"]:
save_dir = config["screenshot"]["save_path"]
os.makedirs(save_dir, exist_ok=True)
driver.save_screenshot(os.path.join(save_dir, "login_page.png"))
四、支持多环境配置(可选)
你还可以在 config.yaml
中定义多个环境:
env: dev
dev:
base_url: https://dev.example.com
prod:
base_url: https://prod.example.com
动态取值:
env = config["env"]
base_url = config[env]["base_url"]
这样一行切环境,不用到处手动改。
五、总结
使用配置文件做参数解耦,带来的收益非常明显:
- 🧹 让脚本更干净,逻辑只管“做事”,数据交给配置
- ✅ 更适配多人协作或项目维护
- 🚀 更容易迁移、调试、切换环境
我的建议是:你只要写过两个以上的 selenium 脚本,立刻就应该用起来。
后续可以扩展一篇“支持命令行动态传入配置路径”的脚本,比如:
python main.py --config=config/dev.yaml