如何获取带有子元素和直接文本的<div>标记的文本?

时间:2019-05-22 04:37:46

标签: selenium

有人可以帮助我编写XPath以获得包含其他元素以及文本的X的文本。以下是HTML代码:

<div class="message success fadable">
  Successfully Deleted        
  <a class="messageCloseButton" href="#">Close</a>
</div>

期望值:

已成功删除

2 个答案:

答案 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))

enter image description here

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;