WatiN: When finding text, how do I get a reference to its containing element?

James Morcom picture James Morcom · Jan 19, 2011 · Viewed 7.3k times · Source

Given the following HTML page:

<html>
<head>
    <title>WatiN Test</title>
</head>
<body>
<div>
    <p>Hello World!</p>
</div>
</body>
</html>

I would like to be able to search for some text (lets say "World"), and get a reference to its parent element (in this case the <p> element).


If I try this:

var element = ie.Element(Find.ByText(t => t.Contains("World")))

or this:

var element = ie.Element(e => e.Text != null && e.Text.Contains("World"));

I get back the <html> element. This is consistent with the WatiN documentation for Element.Text which states: "Gets the innertext of this element (and the innertext of all the elements contained in this element)".

Since all text within the page is contained within the <html> element, I'll always get this back instead of the immediate parent.


Is there a way to get just the text immediately beneath an element (not the text within the elements contained by it)?

Is there another way of doing this?

Many thanks.

Answer

qlayer picture qlayer · Jun 6, 2012

You could use Find.BySelector

var element = ie.Element(Find.BySelector("p:contains('World')"));