Функция Webelement getText() возвращает разные значения для одного и того же элемента

#selenium #selenium-webdriver #automated-tests

Вопрос:

Следующий код используется для получения текста указанного элемента кнопки с идентификатором:

  EE__printer-menu__activator
 

В нашей структуре это drop-down и вот element с дочерними элементами D OM структуры:

 <button data-v-12817ac3="" type="button" class="some classes" id="EE__printer-menu__activator"><div class="v-btn__content">
        Printer
        <i data-v-12817ac3="" aria-hidden="true" class="some classes">arrow_drop_down</i>
</div>
</button>
 

Проблема заключается в следующем: когда drop-down не развернуто, и я пытаюсь получить текст id="EE__printer-menu__activator" элемента, используя getText() я получаю :

 {Printer
arrow_drop_down}
 

чего и следовало ожидать. но когда раскрывающийся список расширен, и я использую то же самое, я получаю только текст первого ребенка:

 {Printer}
 

Не могу понять, почему в этом случае getText() не возвращается "arrow_drop_down" текст последнего дочернего элемента выбранного элемента.

Ответ №1:

Когда drop down не продлевается, то, если вы обратите внимание

 <i data-v-12817ac3="" aria-hidden="true" class="some classes">arrow_drop_down</i>
 

для более конкретного атрибута aria-hidden установлено значение true. поэтому , когда вы звоните .getText EE__printer-menu__activator , вы получаете и text то, и другое .

Теперь, вот небольшое предположение , что когда drop down is expanded , то aria-hidden значение будет установлено false равным . причиняя .getText() return то, что у него есть, и у него есть только первое Printer .

Комментарии:

1. Даже если раскрывающийся список расширен, дочерний элемент все равно будет: <i data-v-12817ac3=»» aria-hidden=»истинный» класс=»некоторые классы»>arrow_drop_down<i data-v-12817ac3=»» aria-hidden=»истинный» класс=»некоторые классы»></i>

2. И еще одна вещь, я понимаю, что атрибут aria-hidden не позволяет программе чтения с экрана читать его, но как это влияет на webdriver?

3. возможно, DOM не был обновлен, или, возможно, элемент был отрисован неправильно. поспи немного и посмотри, поможет ли это. если он не попытается обновить и посмотреть, поможет ли это.

4. Так не должно быть. Страница та же самая, единственное действие, которое я делаю, — это нажимаю на раскрывающийся список. Я пробовал разные вещи, и все время, когда я пытаюсь получить текст элемента <i> перед расширением d-d, я делаю это правильно и всегда получаю пустую строку, когда я пытаюсь сделать то же самое, когда d-d расширяется, что для меня очень странно

5. даже если страница одна и та же, она может вызвать некоторые функции js, и это может повлиять на вашу автоматизацию