You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中运行Java UI自动化测试遇WebDriverManager异常求助

容器中运行UI自动化测试的WebDriverManager Docker连接错误解决方案

错误根源分析

这个错误链指向Docker域名套接字(Domain Socket)访问失败,通常是权限不足、配置冲突或环境兼容性问题导致WebDriverManager无法连接Docker守护进程。

逐一排查解决方案

1. 修复Docker套接字权限

Linux下Docker默认使用/var/run/docker.sock,运行测试的用户(比如Jenkins进程用户)没有访问权限会触发该错误:

  • 将用户加入docker组:
    sudo usermod -aG docker $USER
    
    执行后重启Jenkins服务或重新登录会话生效。
  • 临时排查可放宽套接字权限(不推荐生产环境):
    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,提问作者Никита Перепелов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:40:30