2

Selenium Webdriver 包含一个仅返回元素内可见文本的函数。我想编写一个函数,它只会获取元素内的隐藏文本(即所有在 Selenium Webdriver W3C 规范的含义中不可见的文本)。根据此规范,元素只有在满足以下所有条件时才可见:

  • 元素的高度和宽度必须大于 0px。
  • 如果该元素或其任何祖先被隐藏或具有为无的 CSS 显示属性,则该元素不得可见。
  • 如果存在将元素移出视口且无法滚动到的 CSS3 Transform 属性,则该元素必须不可见。OPTION 和 OPTGROUP 元素被视为特殊情况,当且仅当封闭的 select 元素可见时,它们才被视为显示。
  • 当且仅当它使用的图像可见时,才会显示 MAP 元素。如果封闭的 MAP 可见,则显示地图内的区域。
  • “type=hidden”的任何 INPUT 元素都不可见
  • 如果启用了 Javascript,则任何 NOSCRIPT 元素都不得可见。
  • 如果元素的 offsetParents 的传递闭包中的任何祖先具有固定大小,并且具有“溢出:隐藏”的 CSS 样式,并且元素的位置不在父元素的固定大小范围内,则该元素必须不可见。

是否可以编写一个仅返回包含在元素内的隐藏文本的 JS 函数?您知道任何包含此类功能的库吗?这样的功能会有多慢?

4

1 回答 1

3

是的,如果您只是监视display: nonevisibility: hidden并且没有大小甚至是屏幕外的绝对/相对位置,则可以编写这样的代码。您必须迭代页面中的每个元素,确定该元素是否可见,如果是,则从该元素中的任何文本节点收集文本。

它不会比迭代文档中每个节点的任何其他函数慢或快。总时间将取决于编写迭代代码的效率(例如,它可以跳过隐藏元素的所有子元素)以及文档的长度/复杂程度。

如果您希望能够区分溢出元素边缘之外的文本:隐藏或可能标记为可见性但不在屏幕或视图之外或当前可见滚动区域之外的元素或可能被其他元素遮挡的文本片段,这将非常困难,老实说,我不知道是否所有这些都可以从纯 javascript 中弄清楚。

于 2013-02-25T20:59:39.287 回答