具有相同类的多个 IWebElements 都指向第一个

问题描述

我在 C# 中使用 selenium,尝试将网络表中的值获取到本地表中。

我使用以下方法获取所有行:

var allTableRows = driver.FindElements(By.ClassName("table-row"));

我可以看到 allTableRows 有多个不同的行,不同的 ID 和文本。但是,当我尝试遍历它们并为每一行收集数据时:

foreach (var row in allTableRows)
{
    var currentChange = new ChangeHistoryRow();
    var date = row.FindElements(By.XPath("//cell"))[0]?.Text;
    if (date != null)
    {
        currentChange.Date = date;
    }
    var time = row.FindElements(By.XPath("//cell"))[1]?.Text;
    if (time != null)
    {
        currentChange.Time = time;
    }
    
    listofChanges.Add(currentChange);
}

我最终列表中的每一项都具有相同的数据,即第一行中的数据。 (即使原始表的每一行都有不同的日期/时间值)

没有像特定的 id/class 那样使用额外的选择器,所以我被迫使用一般规则(按类名行,然后每行中的单元格仅在 [0]、[1]、[2 ]...等)

我不确定为什么数据总是指向第一行,因为我们试图在 foreach 中获取特定行的元素。

解决方法

 var date = row.FindElements(By.XPath(".//cell"))[0]?.Text;

使用“.”在定位器的前面,否则上下文将来自 root 。当你给'.'它从父元素搜索