WatiN:在查找文本时,如何获取其包含元素的引用?

Jam*_*com 6 c# watin

给出以下HTML页面:

<html>
<head>
    <title>WatiN Test</title>
</head>
<body>
<div>
    <p>Hello World!</p>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我希望能够搜索一些文本(比方说"World"),并获得对其父元素的引用(在本例中为<p>元素).


如果我试试这个:

var element = ie.Element(Find.ByText(t => t.Contains("World")))
Run Code Online (Sandbox Code Playgroud)

或这个:

var element = ie.Element(e => e.Text != null && e.Text.Contains("World"));
Run Code Online (Sandbox Code Playgroud)

我找回了<html>元素.这与状态的WatiN文档一致Element.Text:"获取此元素的innertext(以及此元素中包含的所有元素的innertext)".

由于页面中的所有文本都包含在<html>元素中,因此我将始终将其返回而不是直接父级.


有没有办法直接在元素下面获取文本(而不是它包含的元素中的文本)?

还有另一种方法吗?

非常感谢.

pro*_*ick 2

下面的代码将找到包含<body/>“World”文本的第一个元素。被分类为元素容器并具有子元素的元素将被省略。

var element = ie.ElementOfType<Body>(Find.First()).Element(e =>
{
    if (e.Text != null && e.Text.Contains("World"))
    {
        var container = e as IElementContainer;
        if (container == null || container.Elements.Count == 0)
            return true;
    }
    return false;
});
Run Code Online (Sandbox Code Playgroud)

注意:您可能想知道为什么我写ie.ElementOfType<Body>(Find.First()).Element而不只是ie.Element. 这应该有效,但事实并非如此。我认为这是一个错误。我在 WatiN 邮件列表上写了一篇关于它的文章,当我收到答案时会更新这个答案。