能否在同一Selenium会话中依次运行多个Python脚本?
在同一浏览器会话中运行多份Python UI自动化脚本的方案
完全可行,问题出在你之前用BAT逐个启动脚本时,每个脚本都独立初始化了新的浏览器驱动实例,所以每次都会打开新窗口。只要让所有测试逻辑共享同一个浏览器驱动(driver)实例,就能在同一会话里依次执行所有测试用例。
下面是两种实用的实现方式:
方式1:用统一入口脚本管理共享driver
把每个测试脚本的逻辑封装成接收driver参数的函数,然后写一个入口脚本来初始化一次driver,再依次调用这些函数。
示例结构:
- main.py(入口脚本)
- script1_login.py(登录测试)
- script2_click.py(点击按钮测试)
- script3_logout.py(登出测试)
main.py 代码:
from selenium import webdriver import script1_login import script2_click import script3_logout if __name__ == "__main__": # 只初始化一次浏览器会话 driver = webdriver.Chrome() driver.implicitly_wait(10) # 把driver传递给各个脚本的测试函数,复用会话 script1_login.run_login(driver) script2_click.run_button_click(driver) script3_logout.run_logout(driver) # 所有测试完成后关闭浏览器 driver.quit()
script1_login.py 代码示例:
def run_login(driver): driver.get("你的登录页面URL") # 执行登录操作 driver.find_element("id", "username").send_keys("test_user") driver.find_element("id", "password").send_keys("test_pwd") driver.find_element("id", "login-btn").click()
其他脚本(script2_click.py、script3_logout.py)同理,都把测试逻辑写在接收driver参数的函数里即可。
方式2:用测试框架的会话级fixture(以pytest为例)
如果你的测试用例较多,用pytest这类测试框架会更便于管理。通过定义会话级fixture,可以让所有测试用例共享同一个driver实例。
步骤1:创建conftest.py(pytest会自动识别这个文件中的fixture)
import pytest from selenium import webdriver @pytest.fixture(scope="session") def driver(): # 会话开始时初始化一次driver driver = webdriver.Chrome() driver.implicitly_wait(10) yield driver # 会话结束时关闭driver driver.quit()
步骤2:编写各测试脚本
比如test_login.py:
def test_login(driver): driver.get("你的登录页面URL") # 执行登录操作 driver.find_element("id", "username").send_keys("test_user") # ...其他登录步骤
test_click.py:
def test_click_button(driver): # 此时driver已经是登录后的会话,直接执行点击操作 driver.find_element("id", "target-btn").click()
test_logout.py:
def test_logout(driver): # 执行登出操作 driver.find_element("id", "logout-btn").click()
步骤3:运行测试
在终端执行命令:
pytest
pytest会自动复用同一个浏览器会话执行所有测试用例,不会打开新窗口。
内容的提问来源于stack exchange,提问作者Hoodie
相关产品推荐
相关产品推荐

