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

通过C#代码启动Selenium独立服务器时遭目标机器主动拒绝

解决代码启动Selenium独立服务器连接被拒绝的问题

核心问题分析

手动运行bat可正常启动服务器,但代码调用时出现连接拒绝,大概率是进程启动逻辑的细节问题,以下是针对性解决方案:


解决方案1:等待服务器完成初始化

代码启动bat后,Selenium服务器需要几秒完成启动初始化,若后续测试代码立刻发起连接,会因服务器未就绪导致拒绝。可以添加等待逻辑,或通过端口检测确认服务器状态:

[BeforeTestRun]
public static void setUp()
{
    // 生成bat文件(推荐后续直接启动Java进程,跳过bat)
    using (StreamWriter sw = new StreamWriter("file.bat"))
    {
        sw.WriteLine("java -jar selenium-server-4.4.0.jar standalone");
    }

    // 启动bat进程
    Process process = Process.Start("file.bat");

    // 方式1:固定等待时间(根据服务器启动速度调整)
    System.Threading.Thread.Sleep(5000); 

    // 方式2:端口检测(更可靠,4444是Selenium默认端口)
    // while (!IsPortInUse(4444))
    // {
    //     System.Threading.Thread.Sleep(1000);
    // }
}

// 辅助方法:检测指定端口是否被占用
private static bool IsPortInUse(int port)
{
    try
    {
        using (var client = new TcpClient("localhost", port))
        {
            return true;
        }
    }
    catch (SocketException)
    {
        return false;
    }
}

解决方案2:修正进程工作目录

代码启动的进程默认工作目录可能不是jar文件所在目录,手动运行bat时是在jar所在目录打开的,因此能找到文件。可以指定进程工作目录,或直接在命令中使用jar绝对路径:

[BeforeTestRun]
public static void setUp()
{
    string jarAbsolutePath = @"D:\your\path\selenium-server-4.4.0.jar"; // 替换为实际路径
    string batPath = "file.bat";

    using (StreamWriter sw = new StreamWriter(batPath))
    {
        sw.WriteLine($"java -jar \"{jarAbsolutePath}\" standalone");
    }

    // 或指定进程工作目录为jar所在文件夹
    ProcessStartInfo startInfo = new ProcessStartInfo(batPath);
    startInfo.WorkingDirectory = Path.GetDirectoryName(jarAbsolutePath);
    Process.Start(startInfo);

    // 记得添加服务器启动等待逻辑
    System.Threading.Thread.Sleep(5000);
}

解决方案3:确保Java环境可被进程访问

代码启动的进程可能未加载系统PATH环境变量,导致找不到java.exe。可以在命令中指定Java绝对路径,或开启shell执行继承环境变量:

[BeforeTestRun]
public static void setUp()
{
    ProcessStartInfo startInfo = new ProcessStartInfo("file.bat");
    startInfo.UseShellExecute = true; // 启用shell执行,继承系统环境变量
    Process.Start(startInfo);
}

或者直接在bat中写Java绝对路径:

"C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -jar selenium-server-4.4.0.jar standalone

优化方案:跳过bat直接启动Java进程

直接启动Java进程更可控,无需生成bat文件,便于排查日志和调整参数:

[BeforeTestRun]
public static void setUp()
{
    string javaPath = "java"; // PATH已配置Java则直接用,否则写绝对路径
    string jarPath = @"D:\your\path\selenium-server-4.4.0.jar";

    ProcessStartInfo startInfo = new ProcessStartInfo(javaPath);
    startInfo.Arguments = $"-jar \"{jarPath}\" standalone";
    startInfo.WorkingDirectory = Path.GetDirectoryName(jarPath);
    startInfo.RedirectStandardOutput = true; // 可选:读取启动日志确认状态
    startInfo.RedirectStandardError = true;

    Process process = Process.Start(startInfo);

    // 读取日志确认服务器启动成功(Selenium 4.4.0启动成功会输出对应标识)
    string log = process.StandardOutput.ReadLine();
    while (log != null && !log.Contains("Selenium Server is up and running"))
    {
        log = process.StandardOutput.ReadLine();
        System.Threading.Thread.Sleep(500);
    }
}

内容的提问来源于stack exchange,提问作者Someone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:30:51