Как получить текст тега <div>, который имеет подэлементы вместе с прямым текстом? - PullRequest
0 голосов
/ 22 мая 2019

Может кто-нибудь, пожалуйста, помогите мне в написании XPath, чтобы получить текст, который содержит некоторые другие элементы, а также текст.Ниже приведен HTML-код:

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

Ожидаемое значение:

Успешно удалено

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Два способа найти элемент и извлечь текст 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;
0 голосов
/ 22 мая 2019

К сожалению, вы не можете справиться с этой ситуацией в 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);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...