微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# - 在 Foreach 期间将列数据存储在列表中

如何解决C# - 在 Foreach 期间将列数据存储在列表中

我目前正在自动一个应用程序,并且有这个 Web 表,我需要检索特定列的信息,并将其存储在列表中。

目前我可以遍历列表的所有行,并且在每一行中,我可以遍历所有列。

该列如下所示:

    ID26        Credit      client1     10/10/2020      $2,222.00       $1,111.00       $1,111.00       $0.00       
    ID27        Credit      client1     10/10/2020      $3,434.00       $2,121.00       $1,313.00       $0.00       
    ID28        Credit      client1     10/10/2020      $4,543.00       $2,232.00       $2,311.00       $0.00       
    ID29        Credit      client1     10/10/2020      $5,787.00       $2,647.00       $0.00       
    ID30        Credit      client1     10/10/2020      $6,178.00       $3,298.00       $2,880.00       $0.00       
    ID31        Credit      client1     10/10/2020      $7,398.00       $875.00         $6,523.00       $0.00       
    ID235       Credit      client1     10/10/2020      $10,000.00      $2,000.00       $8,000.00       $0.00   

我已经编写了这个方法来检索信息:

public static void GetColumnValues()
{
    // xpath of html table
    var elemTable = Driver.FindElement(By.XPath("/html/body/div/div/div[2]/div/div/div/div/div[2]/div/div/div/main/div/div[2]/div[1]/table[2]/tbody"));

    // Fetch all Row of the table
    List<IWebElement> lstTrElem = new List<IWebElement>(elemTable.FindElements(By.TagName("tr")));
    String strRowData = "";
    List<String> ColumnValues = new List<String>();

    int RowsCounter = lstTrElem.Count();
    Console.WriteLine("Rows are: " + RowsCounter);

    // Traverse each row
    foreach (var elemTr in lstTrElem)
    {
        // Fetch the columns from a particuler row
        List<IWebElement> lstTdElem = new List<IWebElement>(elemTr.FindElements(By.TagName("td")));

        if (lstTdElem.Count > 0)
        {
            // Traverse each column
            foreach (var elemTd in lstTdElem)
            {
                // Tagname for the Posting Amount Column
                var PostingAmountCol = Driver.FindElements(By.TagName("td"))[5];

                // "\t\t" is used for Tab Space between two Text
                strRowData = strRowData + elemTd.Text + "\t\t";
                ColumnValues.Add(PostingAmountCol.Text);
            }
        }
        else
        {
            // To print the data into the console
            Console.WriteLine("This is Header Row");
            Console.WriteLine(lstTrElem[0].Text.Replace(" ","\t\t"));
        }
        Console.WriteLine(strRowData);
        strRowData = String.Empty;
    }
    Console.WriteLine(ColumnValues[0]);
    Console.WriteLine(ColumnValues[1]);
    Console.WriteLine(ColumnValues[2]);
    Console.WriteLine(ColumnValues[3]);
    Console.WriteLine(ColumnValues[4]);
    Console.WriteLine(ColumnValues[5]);
    Console.WriteLine(ColumnValues[6]);
}

问题是,在我运行它之后,它不是从列 [5] 中检索和存储所有值,而是只存储第一行的值,然后再次存储它,完全相同的值 (" $2,222.00") 用于所有循环,输出如下所示:

$2,222.00
$2,222.00

我不确定为什么会发生这种情况,是否有更好(或更简单)的方法来使用第 6 列中的数据完成列表?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。