Как читать текст с невидимых элементов с помощью Watir (Ruby)?

На странице есть элемент div, который не отображается, но имеет значение, которое я хочу записать. Вызов текста на нем возвращает мне пустую строку.

Как получить отображаемое значение, не имея дело с необработанным HTML? Могу ли я заставить.text вернуть мне фактическое значение независимо от видимости текста в браузере?

irb(main):1341:0> d.first.visible?
=> false

irb(main):1344:0> d.first.html
=> "<div class=\"day\">7</div>"

irb(main):1345:0> d.first.text
=> ""

PS: Есть много много div (страница кэширует ответ и отображает их соответственно). Я подумал об изменении всего отображения: ни одного на странице или щелчка, чтобы сделать их видимыми, но я бы предпочел избежать этого, если это возможно. Если не возможно решение с изменением всего дисплея, ни один из них не будет предпочтительным.

PPS: Блин, я пытался перегрузить видимое? Метод в классе Watir::Element всегда возвращает true, но это не помогло.

irb(main):1502:0> d.first.visible?
=> true

irb(main):1504:0> d.first.text
=> ""

2 ответа

Решение

Я думаю, что вы должны использовать JavaScript, чтобы получить это.

e = d.first
browser.execute_script('return arguments[0].textContent', e)
#=> "7"

Обратите внимание, что это будет работать только для браузеров, похожих на Mozilla. Для IE-подобных браузеров вам нужно будет использовать innerText, Хотя, если вы используете watir-classic, это будет просто d.first.innerText (т.е. нет execute_script требуется).

Использование attribute_value:

Оказывается, вы можете сделать это проще, используя attribute_value метод. Кажется, он может получить те же значения атрибута, что и javascript.

d.first.attribute_value('textContent')
#=> "7"

Использование inner_html

Если элемент содержит только текстовые узлы (т.е. нет элементов), вы также можете использовать inner_html:

d.first.inner_html
#=> "7"

Попробуйте использовать execute_script Метод меняет значение "видимый" на видимый. Что-то вроде document.getElementById('id').style.visibility = 'visible' при условии, что у него есть идентификатор. Если этого не произойдет, вы всегда можете попросить разработчиков поставить test-id на элемент (или просто сделать это самостоятельно).

Другие вопросы по тегам