如何从父元素获取文本并从子元素中排除文本(C#Selenium)

是否可以仅从父元素而不是Selenium中的子元素获取文本?

示例:假设我有以下代码:

<div class="linksSection>

<a href="https://www.google.com/" id="google">Google Link

<span class="helpText">This link will take you to Google's home page.</span>

</a>

...

</div>

用C#(或任何语言),我将有:

string linktext = driver.FindElement(By.CssSelector(".linksSection > a#google")).Text;

Assert.AreEqual(linkText, "Google Link", "Google Link fails text test.");

但是,链接文本将带有“ Google Link此链接会将您带到Google主页”。

如果不进行大量的字符串操作(例如获取所有子项的文本并从父项的结果文本中减去该文本),是否有办法从父项元素中仅获取文本?

回答:

这是一个常见的问题,selenium因为您无法直接访问文本节点-

换句话说,您的XPath表达式和CSS选择器必须指向实际元素。

这是您的问题的可能解决方案的列表:

  • 获取父元素的文本,对于每个孩子,获取文本并将其从父文本中删除。您剩下的就是所需的文本- Google Link在您的情况下。
  • 如果你想获得的Google Link只是为了让一个断言,它可能是你会不会介意的,如果父母的文本清查 挞用Google Link。请参阅StringAssert.StartsWith()
  • 获取outerHTML父级文本的并将其提要到HTML解析器,例如Html Agility Pack。遵循以下原则:

        string outerHTML = driver.FindElement(By.CssSelector(".linksSection > a#google")).GetAttribute("outerHTML");

HtmlDocument html = new HtmlDocument();

html.LoadHtml(outerHTML);

HtmlAgilityPack.HtmlNode a = html.DocumentNode.SelectNodes("//a[@id='google']");

HtmlNode text = span.SelectSingleNode("following-sibling::text()");

Console.WriteLine(text.InnerText.Trim());

以上是 如何从父元素获取文本并从子元素中排除文本(C#Selenium) 的全部内容, 来源链接: utcz.com/qa/427816.html

回到顶部