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

时间:2015-03-09 15:24:36

标签: c# selenium selenium-webdriver

是否可以仅从父元素而不是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.");

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

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

1 个答案:

答案 0 :(得分:12)

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

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

  • 获取父元素的文本,为每个孩子获取文本并将其从父文本中删除。您还剩下的是所需的文字 - Google Link
  • 如果你想让Google Link只是为了做出一个断言,那么你可以通过检查父母的文本是否 tart {{{ 1}}。见StringAssert.StartsWith()
  • 获取父级文本的Google Link并将其提供给HTML解析器,例如Html Agility Pack。这些方面的东西:

    outerHTML