Геб. Доступ к содержимому элемента заголовка (сценарий/таблица стилей/заголовок…)

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

Для HTML:

<head> <script>alert("MSG")</script> </head>

$("head").children()*.text() // all empty assert $('head script').text() == "" // assert true, so apparently text() is empty. assert $("head script").@innerHTML == 'alert("MSG")' // finally works

Я вижу текст в driver.pageSource

Нужно ли указывать какую-то опцию для разбора головы, или это совершенно невозможно?

РЕДАКТИРОВАТЬ: добавлен пример html и больше пояснений кода. Судя по всему @innerHTML works, и насколько я понял это идет через метод WebDriver .getAttribute("innerHTML");.

Для меня немного удивительно, почему метод text() не работает для головы. Итак, благодаря @jk47 мне удалось решить проблему и получить доступ к элементам, но вообще говоря, вопрос "почему я не могу получить доступ к элементам головы так же, как я могу получить доступ к элементам тела" все еще существует.


person Seagull    schedule 11.03.2015    source источник


Ответы (1)


Возможно, вам придется опубликовать HTML-код элемента <head>, с которым вы пытаетесь взаимодействовать, но я считаю, что вы можете сделать это:

Для HTML:

<head>
  <title>This is the title!</title>
</head>

Затем вы можете использовать:

$("head title").@innerHTML

Чтобы получить текст тега title.

РЕДАКТИРОВАТЬ:

Что касается того, почему .text() не работает, это потому, что Геб вызывает метод Selenium WebElement.getText(), который из API указывает:

Получите видимый (т. е. не скрытый CSS) внутренний текст этого элемента, включая вложенные элементы, без каких-либо начальных или конечных пробелов.

Поскольку элементы <head> являются контейнерами для метаданных, их содержимое никогда не отображается.

person jk47    schedule 12.03.2015
comment
Спасибо за ответ. У меня расширенный вопрос. В принципе - да, ваше решение работает. Вероятно, innerHTML вернет немного другие результаты, чем, например, метод title. (обработка и тд.) - person Seagull; 12.03.2015