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

使用HtmlAgilityPack解析同目录下多个HTML测试报告文件

使用HtmlAgilityPack解析批量测试报告HTML文件

我来帮你搞定用HtmlAgilityPack解析同目录下这批TestReport*.html测试报告的需求,下面是具体的实现步骤和代码示例:

1. 安装HtmlAgilityPack

首先你需要通过NuGet包管理器安装HtmlAgilityPack库:

  • 使用Package Manager Console:
Install-Package HtmlAgilityPack
  • 使用.NET CLI:
dotnet add package HtmlAgilityPack

2. 编写解析代码

下面是完整的C#代码示例,它会遍历当前目录下所有匹配TestReport*.html的文件,提取其中的测试结果统计数据:

using HtmlAgilityPack;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // 获取当前目录下所有TestReport开头的HTML文件
        string[] htmlFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "TestReport*.html");

        foreach (string filePath in htmlFiles)
        {
            Console.WriteLine($"正在处理文件:{Path.GetFileName(filePath)}");
            HtmlDocument doc = new HtmlDocument();

            try
            {
                // 加载HTML文件
                doc.Load(filePath);

                // 提取Passed状态的用例数量
                var passedCountNode = doc.DocumentNode.SelectSingleNode("//li[@class='Passed']//span[@class='summaryCount']");
                if (passedCountNode != null)
                {
                    if (int.TryParse(passedCountNode.InnerText.Trim(), out int passedCount))
                    {
                        Console.WriteLine($"  Passed用例数:{passedCount}");
                    }
                    else
                    {
                        Console.WriteLine("  无法解析Passed用例数量");
                    }
                }
                else
                {
                    Console.WriteLine("  未找到Passed统计节点");
                }

                // 提取Inconclusive状态的用例数量(兼容你提供的片段里的Incon...节点)
                var inconclusiveCountNode = doc.DocumentNode.SelectSingleNode("//li[contains(@class, 'Incon')]//span[@class='summaryCount']");
                if (inconclusiveCountNode != null)
                {
                    if (int.TryParse(inconclusiveCountNode.InnerText.Trim(), out int inconclusiveCount))
                    {
                        Console.WriteLine($"  Inconclusive用例数:{inconclusiveCount}");
                    }
                    else
                    {
                        Console.WriteLine("  无法解析Inconclusive用例数量");
                    }
                }
                else
                {
                    Console.WriteLine("  未找到Inconclusive统计节点");
                }

                Console.WriteLine("------------------------");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"  处理文件出错:{ex.Message}");
                Console.WriteLine("------------------------");
            }
        }

        Console.WriteLine("所有文件处理完成!");
        Console.ReadKey();
    }
}

3. 代码关键说明

  • 文件遍历:用Directory.GetFiles匹配TestReport*.html模式,精准定位目标文件。
  • HTML解析:HtmlDocument.Load加载本地HTML文件,通过XPath表达式定位目标节点:
    • //li[@class='Passed']//span[@class='summaryCount']:精准定位class为Passed的li下的统计数字节点
    • //li[contains(@class, 'Incon')]//span[@class='summaryCount']:用contains匹配部分class名称,兼容你片段里的Incon...节点
  • 异常处理:加入try-catch块避免单个文件处理失败导致整个程序崩溃,同时用int.TryParse代替直接int.Parse,避免数字格式错误引发异常。

内容的提问来源于stack exchange,提问作者Junior.junior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:36