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

获取特定列中所有值的 IEnumerable

如何解决获取特定列中所有值的 IEnumerable

我目前正在使用 Atata 框架并使用 Kendo 网格。我想要实现的是获取 IEnumerable 或包含列中所有值的集合。剑道网格定义如下:

public KendoGrid<TransactionGroupsRow,_> TransactionGroupsGrid { get; private set; }

public class TransactionGroupsRow : KendoGridRow<_>
    {
        [FindByColumnHeader("Group Name")]
        public Link<_> GroupName { get; private set; }
    }

我不仅想要所有链接 GroupName 的集合,我还特别想要它们的文本组件,即链接在屏幕上的显示方式。

An example of the links and their text

所以在这个例子中,我想要一个包含“002999”和“003999”的 IEnumerable。

如果我需要提供更多详细信息,请告诉我。提前致谢!

解决方法

有两种方法可以做到这一点。

  1. 使用 SelectData 方法。对于计数

    // Just get all items:
    IEnumerable<string> groupNames = page.TransactionGroupsGrid.Rows
        .SelectData(x => x.GroupName.Content.Value).Value;
    
    // Assert items:
    page.TransactionGroupsGrid.Rows
        .SelectData(x => x.GroupName.Content.Value).Should.Contain("002999","003999");
    
  2. 更快的方法是使用 SelectContentsByExtraXPath 方法。即使对于有 1000 行的表,这个也能很快工作。但是您需要在行 td 元素内指定表格单元格 tr 元素的相对 XPath。这也可以作为方法提取到页面对象类中。

    // Just get all items:
    IEnumerable<string> groupNames = page.TransactionGroupsGrid.Rows
        .SelectContentsByExtraXPath("td[1]","Group Names").Value;
    
    // Assert items:
    page.TransactionGroupsGrid.Rows
        .SelectContentsByExtraXPath("td[1]","Group Names").Should.Contain("002999","003999");
    

您还可以查看 Performance Practices for ControlList Atata 示例项目。

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