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

Selenium C#获取表格第二列值并转为字符串列表求助

解决Selenium获取表格第二列并转为字符串列表的问题

我来帮你修正代码里的问题,顺利实现获取表格第二列数据并转为字符串列表的需求,同时完善你的搜索功能测试逻辑:

首先先指出你当前代码里的几个核心问题:

  • 遍历行时错误地从整个tableElement查找所有td,而非当前行,导致每次拿到的是全表单元格而非当前行的
  • 索引使用错误:HTML元素索引从0开始计数,第二列对应的索引应该是[1],不是[2]
  • 原代码里直接对元素集合调用ToString(),无法拿到单元格的文本内容

下面是修正后的完整测试代码,我标注了关键修改点:

public void Search_XE_with_Name(String Name) {
    Login();
    driver.Navigate().GoToUrl(homeURL + "/app/admin/xe-group11");
    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15);
    Thread.Sleep(8000);

    //Act
    driver.FindElement(By.Name("xE_NAME")).Clear();
    driver.FindElement(By.Name("xE_NAME")).SendKeys(Name);
    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(7);
    
    IWebElement ele = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/form/div/div[1]/div/div/div/span[3]/button/i"));
    IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
    executor.ExecuteScript("arguments[0].click();", ele);
    
    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
    IWebElement tableElement = driver.FindElement(By.XPath("/html/body/app-root/ng-component/div/div/div[2]/ng-component/div[2]/div/p-table/div/div/div/div[2]/table/tbody"));
    IList<IWebElement> rows = tableElement.FindElements(By.TagName("tr"));
    
    List<string> Code1 = new List<string>();
    
    foreach (IWebElement row in rows) {
        // 关键修改1:从当前遍历的row中获取该行的所有单元格
        IList<IWebElement> cells = row.FindElements(By.TagName("td"));
        // 关键修改2:判断单元格数量足够,再取第二列(索引1)的文本,避免索引越界
        if (cells.Count > 1) {
            // 去除文本首尾空格,避免因空格导致断言失败
            string secondColumnText = cells[1].Text.Trim();
            Code1.Add(secondColumnText);
        }
    }
    
    // 遍历列表做断言,添加错误提示方便排查问题
    foreach (String codes in Code1) {
        Assert.AreEqual(codes, Name, $"搜索结果[{codes}]与输入值[{Name}]不匹配");
    }
    
    driver.Close();
}

额外优化建议:

  • 尽量避免使用绝对XPath,维护性极差,建议换成相对XPath或CSS选择器,比如定位表格可以用By.CssSelector("tbody")(结合更上层的唯一父元素)
  • 减少Thread.Sleep()的使用,换成WebDriverWait显式等待,更稳定可靠,示例:
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    wait.Until(d => d.FindElement(By.Name("xE_NAME")).Displayed);
    
  • 如果搜索结果可能为空,建议先判断Code1是否为空,避免空遍历无意义的断言

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:57:54