Selenium Grid:如何保持会话直至手动关闭,防止测试失败后自动消失
解决Selenium Grid会话自动消失的配置方案
一、修改Docker Compose配置
通过添加环境变量调整Selenium服务端的会话行为,让会话保持活跃直到手动关闭或超时:
services: selenium: image: selenium/standalone-chrome:latest shm_size: '2gb' ports: - "4444:4444" - "7900:7900" environment: # 设置会话超时时间为1天(86400秒),可按需调整时长 - SE_SESSION_TIMEOUT=86400 # 开启会话保持模式,测试结束后不立即销毁浏览器实例 - SE_STAY_ALIVE=true
配置说明:
SE_SESSION_TIMEOUT:定义会话无操作后的最大存活时间,设置足够大的值能保证你有充足时间排查问题。SE_STAY_ALIVE=true:启用后,Selenium节点不会在测试会话结束后立刻关闭浏览器,而是维持会话状态直到超时或手动通过VNC(http://localhost:7900)关闭。
二、测试代码调整(可选)
如果你的测试代码中主动调用了driver.quit(),即使服务端配置了会话保持,浏览器也会被关闭。可以在测试框架中控制,仅在测试通过时关闭driver:
以pytest为例,修改fixture逻辑:
import pytest from selenium import webdriver @pytest.fixture(scope="function") def driver(): driver = webdriver.Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities={'browserName': 'chrome'} ) yield driver # 仅当测试通过时关闭浏览器,失败时保留会话 test_result = pytest.current_test_result if test_result and test_result.outcome != 'failed': driver.quit()
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

