Как получить текст тэга без вложенных тэгов в Selenide?

Добрый день.

Имеется следующая структура DOM:

<div>Моё имущество
<span>Налоги</span>
<span>Платежи</span>
</div>

У меня есть селектор, который находит div и мне нужно получить текст, который находится только в div’е и не находится в span. Т.е. мне нужен текст “Моё имущество”.
Все методы, которые я пробовал (getText(), getAttribute(“textContent”) и тд) возвращают этот текст и текст всех вложенных элементов - это мне не подходит.

Есть ли способ сделать это средствами Selenide?

1 лайк

value
innertext

Вы имеете в виду getAttribute(“innerText”) и getAttribute(“value”)?
Попробовал для моего div метод getAttribute(“innerText”) - это не работает. Возвращается с текстом из вложенных тэгов.

в консоли браузера найдите этот элемент через $x или $$x и посмотрите его свойства, может поможет

$("div span").parent().getText();

Проверяли? В таком случае выдаст текст div и всех его span

$("div").text()

Эээ, а зачем так сложно?

Вам сюда

Всем спасибо за советы.
Попробовал все методы (в том числе и $(“div”).text()) - возвращает текст div и всех его span.
Поэтому вопрос остается открытым.

1 лайк
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>Моё имущество
<span>Налоги</span>
<span>Платежи</span>
</div>
</html>
res = [];
element.childNodes.forEach(function(childNode) { if ( childNode.nodeName == '#text') { res +=childNode.data;}});
console.log(res);

res
"Моё имущество

"

мне помог такой простой вариант
item.childNodes[0].data

@abc_abc @James_Koren
В селениде есть для этого готовый метод: $("div").shouldHave(ownText("Моё имущество"));

Assert that element contains given text (without checking child elements).

1 лайк

Спасибо. Да, сейчас уже его использую. В 2019 году его, к сожалению, еще не было