Csharp/C#教程:WatiN:在查找文本时,如何获取其包含元素的引用?分享


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

给出以下HTML页面:

  WatiN Test   

Hello World!

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

元素)。


如果我试试这个:

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

或这个:

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

我找回了元素。 这与Element.Text的WatiN文档一致,该文档声明: “获取此元素的innertext(以及此元素中包含的所有元素的innertext)”。

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


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

还有另一种方法吗?

非常感谢。

Bellow代码将在找到包含“World”的文本的第一个元素。 将省略被分类为元素容器并具有子元素的元素。

 var element = ie.ElementOfType(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; }); 

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

您可以使用Find.BySelector

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

我想出了一些有用的东西,但它有点笨拙且非常低效。

这基本上是基于最深的包含元素将具有最短的InnerHtml 。 也就是说,包含直接父级的所有其他元素也将包含它的HTML,因此更长!

上述就是C#学习教程:WatiN:在查找文本时,如何获取其包含元素的引用?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public static Element FindElementContaining(IElementsContainer ie, string text) { Element matchingElement = null; foreach (Element element in ie.Elements) { if (element.Text == null) continue; if (!element.Text.ToLower().Contains(text.ToLower())) continue; // If the element found has more inner html than the one we've already matched, it can't be the immediate parent! if (matchingElement != null && element.InnerHtml.Length > matchingElement.InnerHtml.Length) continue; matchingElement = element; } return matchingElement; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1012818.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐