Как читать текст с невидимых элементов с помощью 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 на элемент (или просто сделать это самостоятельно).