C# 如何获取Watin中元素的子元素?

C# 如何获取Watin中元素的子元素?,c#,watin,C#,Watin,给定以下html: <ul id="search-results"> <li> <h3>Result 1</h3> <span class="some-info">Tag line</span> </li> <li> <h3>Result 2</h3> <span class="some-i

给定以下html:

<ul id="search-results">
   <li>
        <h3>Result 1</h3>
        <span class="some-info">Tag line</span>
   </li>
   <li>
        <h3>Result 2</h3>
        <span class="some-info">Another bit</span>
   </li>
   <li>
        <h3>Result 2</h3>
        <span class="some-info">Another bit</span>
   </li>
</ul>
如何迭代搜索结果的子项

我已经设法做到了:

var allListItems = ie.Elements.Filter(e => e.Parent != null && e.Parent.Id == "search-results");

但这并不能帮助我断言
li
中包含的H3或span。目前我能想到的最好的破解方法是:

public static class WatinExtensions
{
    public static ElementCollection Children(this Element self)
    {
        return self.DomContainer.Elements.Filter(e => self.Equals(e.Parent));
    }
}


ElementCollection results = ie.Element(Find.ById("search-results")).Children();

// and 

foreach(Element li in results)
{
    Element info = li.Children().First(e => e.ClassName.Contains("some-info"));
}
这是可行的,但肯定有一个合理的理由这么做

从watin邮件列表:

在我的例子中:

var searchResults = (IElementContainer) ie.Element(Find.ById("search-results"));

foreach (Element element in searchResults.Elements) {
    // can do more here
}
*选项1:*根据您的代码,您可以尝试以下操作:

ie.Spans.Filter(Find.ByClass("some-info"))[0...2].PreviousSibling;
您需要在每个跨度上循环

*选项2:*根据Watin邮件列表中的一些建议(与您自己的答案类似):


然后通过
elem.Element

进行解析,谢谢,这与我自己的答案非常相似。。。我简直不敢相信一个元素找不到它自己的子元素。我想你指的是“后代”,而不是“子元素”。我建议仅为将来用户的搜索而更改此选项。后代意味着我对“搜索结果”下的所有节点感兴趣,最初我只想查找父节点为“搜索结果”的后代。这与类似jQuery的api是一致的。所以您只对
li
元素感兴趣?因为
h3
span
没有
ul
作为父级。他们的祖先是
ul
,父母是
li
。还要注意的是,
IElementContainer
中的
元素
将为您提供后代,而不是孩子。这是您自己问题的绝佳解决方案!我将在WatiN的下一个版本的元素中包含子元素。在下一个版本中已经实现了通过browser.List()对ol和ul的支持,以及通过browser.ListItem()对li元素的支持。哈,杰罗恩。很棒的东西,沃特是一个很棒的图书馆,谢谢你们的努力
ie.Spans.Filter(Find.ByClass("some-info"))[0...2].PreviousSibling;
IElementContainer elem = (IElementContainer)ie.Element(Find.ById("search-results"));