2013-02-25 57 views
2

Selenium Webdriver包含一個函數,它只返回元素內的可見文本。我想編寫一個函數,它只能得到元素內的隱藏文本(即所有不可見的文本in meaning of Selenium Webdriver W3C spec)。根據這個標準的元素是可見的,只有滿足所有以下條件:是否有可能只獲取元素的隱藏文本?

  • 的元素必須有一個高度和寬度比0像素更大。
  • 如果該元素或其任何祖先被隱藏或CSS顯示屬性爲none,則該元素不可見。
  • 如果存在將元素移出視口且無法滾動到的CSS3 Transform屬性,則該元素不可見。 OPTIONs和OPTGROUP元素被視爲特殊情況,當且僅當封閉選擇元素可見時,纔會將其視爲顯示。
  • 當且僅當它使用的圖像可見時纔會顯示MAP元素。如果封閉的MAP可見,則會顯示地圖中的區域。
  • 「type = hidden」的任何輸入元素都不可見
  • 如果啓用Javascript,則任何NOSCRIPT元素都不可見。
  • 如果元素的offsetParents傳遞閉包中的任何祖先具有固定大小,並且具有「overflow:hidden」的CSS樣式,並且該元素的位置不在父級的固定大小範圍內,則該元素一定不可見。

是否可以寫一個JS函數將返回僅包含內側元件隱藏的文本?你知道任何包含這種功能的圖書館嗎?這種功能會有多慢?

回答

3

是的,如果您只是在監視display: none,visibility: hidden以及沒有大小或甚至絕對/相對位置不在屏幕上,則可以編寫此類代碼。您必須迭代頁面中的每個元素,確定元素是否可見,如果是,則從該元素中的任何文本節點收集文本。

它不會比迭代文檔中每個節點的任何其他函數更慢或更快。總時間將取決於迭代代碼的寫入效率(例如,它可以跳過隱藏元素的所有子代)以及文檔的長度/複雜程度。

如果您希望能夠區分具有溢出的元素邊緣之外的文本:隱藏或可能標記爲可見的元素,但不在屏幕外或視圖之外或不在視圖之外目前可查看的滾動區域或可能被其他元素遮擋的文本片段,這將非常困難和誠實,我不知道是否所有這些都可以從純JavaScript中找到。