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

三类架构下C# Selenium网页文本获取与列表对比技术问询

实现方案:Selenium提取文本转List并完成列表对比

没问题,我来帮你贴合三个类的架构需求,完成从网页提取文本、转成列表,再和硬编码列表对比的功能。下面是分步实现的代码和说明:

1. 第一个类:Selenium方法封装类

这个类负责封装Selenium的网页元素操作,把你原来的方法修改为返回List<string>,直接提取下拉框里的所有选项文本:

using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using System.Collections.Generic;
using System.Linq;

public class SeleniumChecklistService
{
    // 注入WebDriver实例,避免硬编码依赖
    private readonly IWebDriver _webDriver;

    public SeleniumChecklistService(IWebDriver webDriver)
    {
        _webDriver = webDriver;
    }

    public List<string> GetWebChecklistRecords()
    {
        // 定位Benefit Checklist对应的下拉控件
        var checklistDropdownElement = _webDriver.FindElement(By.XPath("//div[contains(text(),'Benefit Checklist')]"));
        var recordsDropdown = new SelectElement(checklistDropdownElement);
        
        // 提取所有选项的文本,转成List<string>,同时做归一化处理(去空格)
        var webChecklistItems = recordsDropdown.Options
                                               .Select(opt => opt.Text.Trim())
                                               .ToList();
        
        return webChecklistItems;
    }
}

2. 第二个类:方法调用类

这个类的职责很简单,就是调用上面的封装类,获取网页数据:

using OpenQA.Selenium;
using System.Collections.Generic;

public class ChecklistDataFetcher
{
    public List<string> FetchWebChecklist(IWebDriver driver)
    {
        var seleniumService = new SeleniumChecklistService(driver);
        return seleniumService.GetWebChecklistRecords();
    }
}

3. 第三个类:逻辑执行与对比类

这里实现核心的对比逻辑,你可以根据需求选择对比方式——比如找出差异项、验证完全匹配等,下面是通用的对比实现:

using System.Collections.Generic;
using System.Linq;

public class ChecklistComparator
{
    public void CompareChecklists(List<string> webItems, List<string> hardcodedItems)
    {
        // 先做文本归一化,避免大小写、空格导致的匹配误差
        var normalizedWeb = webItems.Select(item => item.ToLowerInvariant().Trim()).ToList();
        var normalizedHardcoded = hardcodedItems.Select(item => item.ToLowerInvariant().Trim()).ToList();

        // 计算差异项
        var webOnlyItems = normalizedWeb.Except(normalizedHardcoded).ToList();
        var hardcodedOnlyItems = normalizedHardcoded.Except(normalizedWeb).ToList();
        var matchingItems = normalizedWeb.Intersect(normalizedHardcoded).ToList();

        // 输出对比结果(你可以改成日志、断言或者业务逻辑处理)
        if (webOnlyItems.Any())
        {
            System.Console.WriteLine("⚠️ 网页存在但硬编码未包含的检查项:");
            foreach (var item in webOnlyItems) System.Console.WriteLine($"  - {item}");
        }

        if (hardcodedOnlyItems.Any())
        {
            System.Console.WriteLine("⚠️ 硬编码存在但网页未显示的检查项:");
            foreach (var item in hardcodedOnlyItems) System.Console.WriteLine($"  - {item}");
        }

        if (!webOnlyItems.Any() && !hardcodedOnlyItems.Any())
        {
            System.Console.WriteLine("✅ 两个检查列表完全匹配!");
        }
    }
}

整合使用示例

在你的主程序或者测试代码里,这样串联三个类:

using OpenQA.Selenium.Chrome;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // 初始化WebDriver(这里用ChromeDriver,你可以换成其他浏览器驱动)
        using (var driver = new ChromeDriver())
        {
            driver.Navigate().GoToUrl("你的目标网页地址");

            // 硬编码的检查列表
            var hardcodedChecklist = new List<string>
            {
                "Medical Benefit",
                "Dental Benefit",
                "Vision Benefit"
            };

            // 调用类获取网页数据
            var dataFetcher = new ChecklistDataFetcher();
            var webChecklist = dataFetcher.FetchWebChecklist(driver);

            // 执行对比逻辑
            var comparator = new ChecklistComparator();
            comparator.CompareChecklists(webChecklist, hardcodedChecklist);
        }
    }
}

关键注意事项

  • 文本归一化:一定要对提取的网页文本和硬编码文本做统一处理(比如转小写、去空格),否则很容易因为网页文本的格式问题导致对比错误。
  • 依赖注入:把WebDriver通过构造函数传入服务类,避免代码耦合,也方便后续做单元测试。
  • 灵活调整对比逻辑:如果只需要验证两个列表是否完全一致,可以直接用normalizedWeb.SequenceEqual(normalizedHardcoded)来快速判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:05