鉴于以下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>
Run Code Online (Sandbox Code Playgroud)
我可以得到ul元素:
Element ul = ie.Element(Find.ById("search-results"));
Run Code Online (Sandbox Code Playgroud)
我如何迭代孩子们search-results?
我设法得到了:
var allListItems = ie.Elements.Filter(e => e.Parent != null && e.Parent.Id == "search-results");
Run Code Online (Sandbox Code Playgroud)
但这并没有帮助我断言关于H3中包含的H3或跨度li.
*选项1:*根据您的代码,您可以尝试以下方式:
ie.Spans.Filter(Find.ByClass("some-info"))[0...2].PreviousSibling;
Run Code Online (Sandbox Code Playgroud)
你需要遍历每个跨度.
*选项2:*基于Watin邮件列表中的一些建议(类似于您自己的答案):
IElementContainer elem = (IElementContainer)ie.Element(Find.ById("search-results"));
Run Code Online (Sandbox Code Playgroud)
然后你解析 elem.Element
我能想到的当前最好的黑客是:
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"));
}
Run Code Online (Sandbox Code Playgroud)
它有效,但肯定有一个适当的原因吗?
从watin邮件列表中有一个正确的方法:
在我的例子中:
var searchResults = (IElementContainer) ie.Element(Find.ById("search-results"));
foreach (Element element in searchResults.Elements) {
// can do more here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9130 次 |
| 最近记录: |