有人可以帮助我编写XPath以获得包含其他元素以及文本的X的文本。以下是HTML代码:
<div class="message success fadable">
Successfully Deleted
<a class="messageCloseButton" href="#">Close</a>
</div>
期望值:
已成功删除
答案 0 :(得分:0)
不幸的是,您无法在xpath中处理这种情况。因此,您必须中继javascript以获取文本节点并返回值。
这是python解决方案。
def get_text_exclude_children(element):
return driver.execute_script(
"""
var parent = arguments[0];
var child = parent.firstChild;
var textValue = "";
while(child) {
if (child.nodeType === Node.TEXT_NODE)
textValue += child.textContent;
child = child.nextSibling;
}
return textValue;""",
element).strip()
这是在您的情况下调用此方法的方法
ele = driver.find_element_by_xpath("//div[@class='message success fadable']")
print(get_text_exclude_children(ele))
Java中的相同方法:
public String get_text_exclude_children(WebDriver driver, WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return (String) js.executeScript("var parent = arguments[0];"
+ "var child = parent.firstChild;"
+ " var textValue = ''; while(child) { "
+ "if (child.nodeType === Node.TEXT_NODE)"
+ " textValue += child.textContent;"
+ " child = child.nextSibling; "
+ "} return textValue;",element);}
答案 1 :(得分:0)
找到元素和获取div文本以及验证实际结果和预期结果的两种方法。
1。使用包含方法
var element = driver.FindElement(By.XPath("//div[contains(text(),'Successfully Deleted')]"));
string expectedResult = "Successfully Deleted";
string actualResult = element.Text;
Assert.AreEqual(expectedResult,actualResult);
2。第二
var element = driver.FindElement(By.XPath("//div[@class = 'message success fadable'])]"));
string actualText = element.Text;