2013-02-25 2 views
2

Selenium Webdriver содержит функцию, которая возвращает только видимый текст внутри элемента. Я бы хотел написать функцию, которая получит только скрытый текст внутри элемента (т. Е. Весь текст, который не отображается in meaning of Selenium Webdriver W3C spec). В соответствии с этой спецификации элемента видна только тогда, когда все следующие условия:Можно ли получить только скрытый текст элемента?

  • элемент должен иметь высоту и ширину больше, чем 0px.
  • Элемент не должен быть видимым, если этот элемент или любой из его предков скрыт или имеет свойство отображения CSS, которое равно none.
  • Элемент не должен быть видимым, если есть свойство CSS3 Transform, которое перемещает элемент из окна просмотра и не может быть прокручено до. Элементы OPTION и OPTGROUP рассматриваются как особые случаи, они считаются отображаемыми тогда и только тогда, когда видимый элемент выбора является видимым.
  • Элементы MAP отображаются, если и только если изображение, которое оно использует, видно. Области внутри карты отображаются, если отображается MAP.
  • Любые элементы INPUT типа «type = hidden» не отображаются
  • Любые элементы NOSCRIPT не должны быть видимыми, если включен Javascript.
  • Элемент не должен быть видимым, если какой-либо предок в транзитивном закрытии элемента offsetParents элемента имеет фиксированный размер и имеет стиль CSS «overflow: hidden», а местоположение элемента не находится в пределах фиксированного размера родителя.

Можно ли написать функцию JS, который будет возвращать только скрытый текст, содержащийся внутри элемента? Вы знаете какую-либо библиотеку, которая содержит такую ​​функцию? Насколько медленной будет такая функция?

ответ

3

Да, этот код можно написать, если вы просто следите за display: none, visibility: hidden и не имеете никакого размера или даже абсолютного/относительного положения, которое находится вне экрана. Вам нужно будет перебирать каждый элемент страницы, определять, является ли элемент видимым, и, если да, собирать текст из любых текстовых узлов в этом элементе.

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

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

Смежные вопросы