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

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

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

 

在C#(或任何语言)中,我将:

 string linktext = driver.FindElement(By.CssSelector(".linksSection > a#google")).Text; Assert.AreEqual(linkText, "Google Link", "Google Link fails text test."); 

但是,linktext将具有“谷歌链接此链接将带您到谷歌的主页。”

如果没有做一堆字符串操作(例如获取所有子节点的文本并从父节点的结果文本中减去它),有没有办法从父元素中获取文本?

这是selenium的常见问题 ,因为您无法直接访问文本节点 – 换句话说,您的XPath表达式和CSS选择器必须指向实际元素。

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

  • 获取父元素的文本,为每个子元素获取文本并将其从父文本中删除。 你还剩下的是所需的文字 – 在你的情况下Google Link
  • 如果你想让Google Link只是为了做出一个断言,那么你可以通过检查父母的文本是否 Google Link 。 请参见StringAssert.StartsWith()
  • 获取父文本的outerHTML并将其提供给HTML Parser,如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 = strong.SelectSingleNode("following-sibling::text()"); Console.WriteLine(text.InnerText.Trim());