当前位置: 首页 > 知识库问答 >
问题:

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

贝德辉
2023-03-14

在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.");

然而,链接文本将有“谷歌链接”这个链接将带你进入谷歌主页

如果不进行一系列字符串操作(例如获取所有子元素的文本,并从父元素的结果文本中减去这些文本),有没有办法只从父元素获取文本?

共有2个答案

羿经武
2023-03-14

这项工作有三种方法

  1. 用 '''', 替换子节点中不需要的文本,逻辑就像其他答案一样。
  2. 使用js:
    private static String OWN_TEXT_JS = "arr=[];content=document.querySelector(arguments[0]);for(i=0,len=content.childNodes.length;i<len;i++){if(content.childNodes[i].nodeType===3){arr.push(content.childNodes[i].nodeValue);}}str=arr.join(\"\"); return str;";
    Object result = ((JavascriptExecutor) WebDriver).executeScript(OWN_TEXT_JS, path);
    if (!(result instanceof String))
       return null;
    else 
       return (String) result;


    element= webDriver.findElement...
    String result = Jsoup.parse(element.getAttribute("outerHTML")).selectFirst(element.getTagName()).ownText();

    WebElement webElement = webDriver.findElement(By.xpath("/html"));
    Jsoup.parse(webElement.getAttribute("outerHTML")).selectFirst(csspath).ownText();
东郭凯捷
2023-03-14

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

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

>

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());
 类似资料:
  • 问题内容: 是否可以仅从父元素而不是Selenium中的子元素获取文本? 示例:假设我有以下代码: 用C#(或任何语言),我将有: 但是,链接文本将带有“ Google Link此链接会将您带到Google主页”。 如果不进行大量的字符串操作(例如获取所有子项的文本并从父项的结果文本中减去该文本),是否有办法从父项元素中仅获取文本? 问题答案: 这是一个常见的问题,因为您无法直接访问文本节点- 换

  • 我是一个自动化测试的新手,现在我正在使用selenium C#。我有一个问题,我想从一个元素中获取文本,但是代码: 和我的声明 driver.findElement(by.xpath(“//*[@id='contact list']/div[1]/div/div[1]/div/div/div/div/div/div[2]”)).text; 获取: 有人有办法吗?非常感谢!此处为HTML:

  • 我想从Chrome的模态中得到一条短信。使用控制台,我可以获得如下内部文本: 现在,在我的测试中,我可以使用 我甚至可以点击那个网址 例如,我不能将内部文本放入变量。我试着使用这篇文章中的ClientFunction 并尝试使用本文建议的普通选择器 如何从元素中提取文本?我知道在这种情况下是有限的,对吗?

  • 我正在浏览一个包含几个元素的网页,我想在不包含其子元素的情况下获取其中的文本。 页面结构如下: 当我使用时,得到的结果是: 我正在使用BeautifulSoup4和Python3

  • 问题内容: 我只想从汤中最上面的元素中提取文本;但是汤.text也会给出所有子元素的文本: 我有 输出为。我只想“是”。 实现此目标的最佳方法是什么? 编辑 :我也想在解析’ ‘时输出。 问题答案: 那又如何呢? 编辑: 我想我已经了解了你现在想要的。尝试这个: