Как найти textarea элемент по его .value содержимому с помощью XPATH. '//textarea[text() = 'value']' не работает

Добрый день!

Имеется документ, содержимое которого заполняется с помощью javascript. Он содержит несколько textarea элементов. Я пытаюсь найти их по их содержимому с помощью Xpath: //textarea[text() = 'value']. Но такой способ не срабатывает, если значение в textarea устанавливалось скриптом через textarea.value = '' (или менялось ручным вводом текста).

Можно ли с помощью XPATH найти textarea и input элементы по их содержимому в .value? Если нельзя, то почему так?

Тест прилагается:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <title>Xpath test</title>
  <script type="text/javascript" language="javascript">
    function test() {
        // set new 'value' value 
       var textarea = document.getElementById('tx')
       textarea.value = 'value' 

       // XPATH search old 'initial' value
       var nodesSnapshot = document.evaluate("//textarea[text() = 'initial']", document, null, 
                                                 XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
       for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ) {
         var ta = nodesSnapshot.snapshotItem(i);
         ta.value = 'fail' // set 'fail' if old value was found
       }
    }
  </script>
 </head>
 <body onload="test();">
  <textarea id="tx">initial</textarea>
 </body>
</html>
  • Вопрос задан
  • 5861 просмотр
Пригласить эксперта
Ответы на вопрос 3
Попробуйте textContent вместо value

textarea.textContent = 'value';
Ответ написан
XaBoK
@XaBoK
Сейчас проверил через xpath.me (убрав тело скрипта), запрос //textarea[text() = 'initial'] отработал как и положено. Единственное, что могу предположить — вы не подгрузили нужный namespace.
Ответ написан
Colwin
@Colwin
Ведущий Java-разработчик
Используйте "//textarea[value = 'initial']", прокатывает во всех браузерах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы