简体   繁体   中英

How do I get the children of an Element in Watin?

Given the following 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>

I can get the ul element with:

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

How do I iterate over the children of the search-results ?

I've managed to get as far as:

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

But this doesn't help me assert things about the H3 or span contained within the li 's.

* Option1: *Based on your code, you can try something like:

ie.Spans.Filter(Find.ByClass("some-info"))[0...2].PreviousSibling;

you will need to loop over each span.

* Option2: *Based on some suggestions from the Watin mail list (similar to your own answer as well):

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

Then you parse through elem.Element

Current best hack I can think of is:

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"));
}

It works but surely there is a proper why to do this?

And there is a correct way to do this from the watin mailing list:

In my example:

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

foreach (Element element in searchResults.Elements) {
    // can do more here
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM