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