具有相同 class 的多个 IWebElements 都指向第一个
Multiple IWebElements with same class all point to the first one
我在 C# 中使用 Selenium,尝试从网络上的 table 获取值到本地 table。
我使用以下方法获取所有行:
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);
}
我最终列表中的每一项都具有相同的数据,即第一行中的数据。 (即使原来的 table 每行有不同的 date/time 值)
没有像特定 id/class 那样可以使用的额外选择器,所以我不得不使用通用规则(按 class 名称排列的行,然后每行中的单元格仅在 [0 ], [1], [2]...等等)
我不确定为什么数据总是指向第一行,因为我们正试图在 foreach 中为该特定行获取元素。
var date = row.FindElements(By.XPath(".//cell"))[0]?.Text;
使用“.”在定位器前面,否则上下文将来自 root 。当你给'。'它从父元素搜索
我在 C# 中使用 Selenium,尝试从网络上的 table 获取值到本地 table。
我使用以下方法获取所有行:
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);
}
我最终列表中的每一项都具有相同的数据,即第一行中的数据。 (即使原来的 table 每行有不同的 date/time 值)
没有像特定 id/class 那样可以使用的额外选择器,所以我不得不使用通用规则(按 class 名称排列的行,然后每行中的单元格仅在 [0 ], [1], [2]...等等)
我不确定为什么数据总是指向第一行,因为我们正试图在 foreach 中为该特定行获取元素。
var date = row.FindElements(By.XPath(".//cell"))[0]?.Text;
使用“.”在定位器前面,否则上下文将来自 root 。当你给'。'它从父元素搜索