如何使用Selenium和Python在同一浏览器标签页中依次执行测试用例
问题核心原因
你两个测试文件每次都单独初始化webdriver.Chrome(),每次都会生成全新的浏览器会话,Cookie、登录状态完全不互通,所以第二个用例肯定会跳转到登录页。下面给出两种可行方案:
方案1:用测试框架管理全局浏览器实例(最推荐)
你可以用pytest这类测试框架的fixture功能,把浏览器实例定义为全局共享的,所有测试用例都复用同一个实例:
首先新建conftest.py文件存放公共fixture:
import pytest from selenium import webdriver @pytest.fixture(scope="session", autouse=True) def browser(): # 整个测试会话只初始化一次浏览器 driver = webdriver.Chrome() yield driver # 所有用例跑完后再关闭浏览器 driver.quit()
之后修改登录用例文件:
from pages.login_page import LoginPage def test_login(browser): log_page = LoginPage(driver=browser) log_page.go() log_page.user_name_field.input_text('mail@gmail.com') log_page.password_field.input_text('Pass123') log_page.login_button.click() # 可加断言验证登录成功 assert "首页" in browser.title
再修改创建请求用例文件:
from pages.med_page import MedPage def test_create_request(browser): med_page = MedPage(driver=browser) med_page.go() # 后续写创建请求的逻辑即可
执行时直接用pytest命令跑所有用例,就会自动复用同一个浏览器窗口,登录状态会全程保留。
方案2:共享Cookie实现跨文件登录状态复用(适合必须单独跑两个文件的场景)
如果你的需求就是要单独运行两个文件,可以在第一个用例登录完成后把浏览器的Cookie持久化存储,第二个用例启动浏览器后先加载Cookie再访问页面:
登录用例末尾新增存Cookie的代码:
import json # 登录逻辑跑完之后加 cookies = browser.get_cookies() with open("cookies.json", "w") as f: json.dump(cookies, f)
第二个创建请求的用例先加载Cookie再访问页面:
from selenium import webdriver import json from pages.med_page import MedPage browser = webdriver.Chrome() # 先访问一次站点根域名,否则添加Cookie会报错 browser.get("替换为你的站点根域名地址") # 加载之前存储的Cookie with open("cookies.json", "r") as f: cookies = json.load(f) for cookie in cookies: browser.add_cookie(cookie) # 现在访问请求页就已经是登录状态 med_page = MedPage(driver=browser) med_page.go()
注意事项
- 不要在每个测试文件里都单独初始化
webdriver.Chrome(),除非你明确需要全新的会话 - 如果是单流程测试用例,也可以直接把两个用例的逻辑按顺序写在同一个文件里,共用同一个browser实例,是最省事的写法。
内容的提问来源于stack exchange,提问作者Kiprian
相关产品推荐
相关产品推荐

