css/xpath选择器,用于在使用selenium webdriver(java)时排除元素中的子节点

css/xpath选择器,用于在使用selenium webdriver(java)时排除元素中的子节点,xpath,selenium-webdriver,css-selectors,Xpath,Selenium Webdriver,Css Selectors,CSS/xpath选择器,用于获取链接文本,不包括.mute中的文本 我有如下html: <a href="link"> Text <span class="muted"> –text</span> </a> 当我执行getText()时,我会得到完整的文本,如text text。是否可以排除禁用的子类文本 尝试了cssSelector=“a:not([span='mute'])”不起作用 xpath=“//a/no

CSS/xpath选择器,用于获取链接文本,不包括
.mute
中的文本

我有如下html:

<a href="link">
          Text
   <span class="muted"> –text</span>
</a>

当我执行
getText()
时,我会得到完整的文本,如
text text
。是否可以排除禁用的子类文本

尝试了
cssSelector=“a:not([span='mute'])”
不起作用

xpath=“//a/node()[not(name()='span')][1]”

错误:xpath表达式
“//a/node()[not(name()='span')][1]”的结果是:[objectText]。它应该是一个元素


AFAIK仅使用
CSS
选择器无法完成此操作。您可以尝试使用
JavaScriptExecutor
获取所需的文本

由于您没有提到您使用的编程语言,我将向您展示关于
Python
的示例:

link = driver.find_element_by_css_selector('a[href="link"]')
driver.execute_script('return arguments[0].childNodes[0].nodeValue', link)

这将只返回
“Text”
,而不返回
“-Text”

使用Selenium WebDriver的API无法执行此操作。您必须在代码中处理它,如下所示:

// Get the entire link text
String linkText = driver.findElement(By.xpath("//a[@href='link']")).getText();

// Get the span text only
String spanText = driver.findElement(By.xpath("//a[@href='link']/span[@class='muted']")).getText();

// Replace the span text from link text and trim any whitespace
linkText.replace(spanText, "").trim();

cssSelector=“a span:not(.muted)
应该有效谢谢@winner\u joiner。但这不起作用。它返回一个空集。谢谢。这可以工作,但正在寻找是否还有其他方法。可能使用xpath选择器或jquery?
xpath
获取所需文本是
规范化空间(//a[@href=“link”]/text())
,但selenium
不支持此语法…谢谢。这很有帮助。