今天我问过this个问题,但是我没有指出它的范围,这是在Selenium Webdriver中使用的。
所以我有这个td:
<td>
<span id="PartComment">
REMAN WATER PUMP
<i>w/2.05" DIAMETER THERMOSTAT OUTLET - SUPPLIED w/PULLEY
</i>
</span>
</td>
我想要一个xpath只能找到文本REMAN WATER PUMP,以便稍后将其转换为字符串。
driver.findElement(By.xpath("//span[@id='lblPartComment']/text()"));
但问题是,由于我只查找文本而不是DOM对象,因此WebDriver无法将其视为:
Exception in thread "main" org.openqa.selenium.InvalidSelectorException: The given selector //span[@id='lblPartComment']/text() is either invalid or does not result in a WebElement. The following error occurred: InvalidSelectorError: The result of the xpath expression "//span[@id='lblPartComment']/text()" is: [object Text]. It should be an element.
请您提供该xpath的替代方案吗?一个找到我上面提到的文本,并排除i
中的文本?
另外,related。
由于
答案 0 :(得分:1)
您可以使用以下代码:
var firstText = this.Driver.FindElement(By.XPath("//span[@id='lblPartComment']")).Text;
var firstChildText = this.Driver.FindElement(By.XPath("//span[@id='lblPartComment']/i")).Text;
firstText = firstText.Replace(firstChildText, string.Empty);
找到父元素和子元素,获取文本并用空字符串替换子文本。 :)
答案 1 :(得分:0)
你可以这样做。从this
引用 JavascriptExecutor js = (JavascriptExecutor) driver;
String text = (String) js.executeScript("var parent = arguments[0];"
+ "var child = parent.firstChild;"
+ "var ret = \"\";"
+ "while(child) {"
+ " if (child.nodeType === Node.TEXT_NODE)"
+ " ret += child.textContent;"
+ " child = child.nextSibling;"
+ "}"
+ "return ret;", driver.findElement(By.id("PartComment")));