这篇补一个老生常谈但真的实用的东西:自动化脚本里的配置管理

你可能也经历过——账号写死在代码里,切换环境靠注释改变量,想要换个登录参数得翻几百行脚本找地方改。后来我干脆用了一个 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

添加微信