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

Posted

技术标签:

【中文标题】具有相同类的多个 IWebElements 都指向第一个【英文标题】:Multiple IWebElements with same class all point to the first one 【发布时间】:2021-06-02 14:09:31 【问题描述】:

我在 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 中获取特定行的元素。

【问题讨论】:

【参考方案1】:
 var date = row.FindElements(By.XPath(".//cell"))[0]?.Text;

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

【讨论】:

非常感谢! :)

以上是关于具有相同类的多个 IWebElements 都指向第一个的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是存在具有相同类的多个元素[重复]

puppeteer waitForSelector 当有多个具有相同类的元素并且可以看到多个元素时

在 C++ 中使用具有相同类的多个模板

Typeahead JS 不适用于具有相同类的多个输入

C++ 指向具有匹配函数签名的任何类的成员函数的指针

在具有相同类的多个可放置 div 上拖动图像