Docker中运行Java UI自动化测试遇WebDriverManager异常求助
容器中运行UI自动化测试的WebDriverManager Docker连接错误解决方案
错误根源分析
这个错误链指向Docker域名套接字(Domain Socket)访问失败,通常是权限不足、配置冲突或环境兼容性问题导致WebDriverManager无法连接Docker守护进程。
逐一排查解决方案
1. 修复Docker套接字权限
Linux下Docker默认使用/var/run/docker.sock,运行测试的用户(比如Jenkins进程用户)没有访问权限会触发该错误:
- 将用户加入docker组:
执行后重启Jenkins服务或重新登录会话生效。sudo usermod -aG docker $USER - 临时排查可放宽套接字权限(不推荐生产环境):
sudo chmod 666 /var/run/docker.sock
2. 解决WebDriverManager与Selenide的配置冲突
代码中同时使用WebDriverManager的browserInDocker()和Selenide的Configuration.browser,导致驱动管理逻辑冲突:
- 移除
Configuration.browser = "chrome";,WebDriverManager已自动创建Docker中的Chrome实例,Selenide会复用该驱动。 - 可选:指定Chrome镜像稳定版本,避免拉取未知版本失败:
static WebDriverManager wdm = WebDriverManager.chromedriver() .browserInDocker() .chromeVersion("118.0") .enableVnc() .enableRecording();
3. 调整Jenkins容器的Docker访问配置
如果Jenkins本身运行在Docker容器内,需要挂载Docker套接字并确保权限:
- 在docker-compose.yml的Jenkins服务中添加挂载:
services: jenkins: # ...其他配置 volumes: - /var/run/docker.sock:/var/run/docker.sock - jenkins_home:/var/jenkins_home - 确保Jenkins容器内的用户属于docker组(可通过指定
user: root临时测试,生产环境建议调整组ID匹配宿主机docker组)。
4. 升级WebDriverManager版本
旧版本可能存在Docker客户端兼容性问题,升级到最新稳定版:
- Maven依赖更新示例:
<dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.6.3</version> <!-- 替换为最新稳定版 --> </dependency>
调整后的测试代码示例
import com.codeborne.selenide.Selenide; import com.codeborne.selenide.WebDriverRunner; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; public class ProfileListTest { private static final String BASE_URL = "你的系统URL"; private static final String LOGIN = "你的登录名"; private static final String PASSWORD = "你的密码"; static WebDriverManager wdm = WebDriverManager.chromedriver() .browserInDocker() .chromeVersion("118.0") .enableVnc() .enableRecording(); @BeforeAll public static void setUp(){ // 创建Docker中的Chrome驱动并交给Selenide管理 WebDriver driver = wdm.create(); WebDriverRunner.setWebDriver(driver); Configuration.browserSize = "1920x1080"; // 若启用VNC,可关闭headless以便可视化查看;否则保持true // Configuration.headless = true; // 登录流程 open(BASE_URL); $(By.id("login")).setValue(LOGIN); $(By.id("password")).setValue(PASSWORD).pressEnter(); } @AfterAll public static void tearDown(){ // 登出流程 open(BASE_URL); $(By.linkText(LOGIN)).click(); $(By.partialLinkText("Выход")).click(); // 清理缓存 Selenide.clearBrowserCookies(); Selenide.clearBrowserLocalStorage(); // 关闭驱动并销毁Docker容器 wdm.quit(); } }
内容的提问来源于stack exchange,提问作者Никита Перепелов
相关产品推荐
相关产品推荐

