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

如何用C#版Selenium批量处理多链接操作并解决DataRow引用错误

解决CSV批量处理门户页面自动化的问题

先处理你遇到的DataRow引用错误

你碰到的错误翻译为:

错误 CS0012:类型“DataRow”定义在未被引用的程序集中。必须添加对程序集“System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。

解决方法分两种场景:

  • 传统.NET Framework(Visual Studio):右键项目 → 「添加」→「引用」→ 在程序集列表里找到System.Data并勾选 → 点击确定。
  • .NET Core/.NET 5+:打开项目的.csproj文件,添加以下包引用:
<PackageReference Include="System.Data.DataSetExtensions" Version="4.7.0" />

完整的CSV导入+批量执行方案

方案1:用测试框架的DataRow数据驱动(适合MSTest/NUnit)

如果你的代码是基于单元测试框架编写的,直接用框架自带的数据源绑定更规范:

  1. 确保CSV格式正确(第一行是表头,比如URL,后续每行一个目标地址):
URL
https://your-portal/page1
https://your-portal/page2
https://your-portal/page3
  1. 在测试方法上标记数据源(以MSTest为例):
[TestClass]
public class PortalTests
{
    private IWebDriver driver;

    [TestInitialize]
    public void Setup()
    {
        driver = new ChromeDriver(); // 初始化你的浏览器驱动
    }

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDirectory|\urls.csv", "urls#csv", DataAccessMethod.Sequential)]
    [TestMethod]
    public void ProcessPortalPages()
    {
        // 用表头名称获取URL,比索引更易维护
        string url = TestContext.DataRow["URL"].ToString();
        driver.Url = url;

        // 执行你的通用操作(定位器一致直接复用)
        driver.FindElement(By.Id("common-button")).Click();
        // 其他操作:填写表单、验证内容等
    }

    [TestCleanup]
    public void Teardown()
    {
        driver.Quit();
    }

    public TestContext TestContext { get; set; }
}

方案2:手动读取CSV(无需依赖测试框架,更灵活)

如果不需要测试框架的数据源,可以直接读取CSV文件循环执行:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.IO;
using System.Linq;

class PortalAutomation
{
    static void Main()
    {
        using (var driver = new ChromeDriver())
        {
            // 读取CSV,跳过表头行,过滤空行
            var urls = File.ReadAllLines("urls.csv")
                           .Skip(1)
                           .Select(line => line.Trim())
                           .Where(url => !string.IsNullOrWhiteSpace(url));

            foreach (var url in urls)
            {
                driver.Navigate().GoToUrl(url);
                // 执行通用操作
                driver.FindElement(By.CssSelector(".common-action")).Click();
                // 添加显式等待确保元素加载完成
                var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
                wait.Until(d => d.FindElement(By.Id("success-message")).Displayed);
            }
        }
    }
}

注意事项

  • CSV文件路径:可以用绝对路径,或者在Visual Studio里设置文件属性为「复制到输出目录:始终复制」
  • 页面等待:务必添加显式等待,避免因页面加载慢导致元素定位失败
  • 异常处理:可以在循环里添加try-catch块,避免单个URL失败导致整个流程中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38