2013-02-07 41 views
4

頁面上有一個不可見的div,但有一些我想捕獲的值。調用它上面的文本會返回一個空字符串。如何使用Watir(Ruby)從不可見元素中讀取文本?

如何獲取顯示的值而不必處理原始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 
=> "" 
+0

你使用watir-classic,watir-webdriver還是兩者兼而有之?雖然這兩個寶石的行爲是相同的,但我認爲解決方法會有所不同。 –

+0

使用firefox的gem'watir-webdriver' – Jeremy

+0

解析該HTML怎麼樣? –

回答

7

我認爲你必須使用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" 
+0

聰明的工作!謝謝Justin。這的確有訣竅。這是相當詳細的,但工程。謝謝。如果沒有人提出更聰明的答案,我會接受答案,但你肯定得到了我的+1!非常感謝。 – Jeremy

+1

如果您需要經常這樣做,您可以隨時將其添加爲Element類的一個方法。 –

0

嘗試使用execute_script方法不改變該值的「可見」到可見。假設它有一個ID,就像document.getElementById('id').style.visibility = 'visible'。如果不是這樣,你總是可以要求開發者在元素上添加一個測試標識(或者自己動手)。

相關問題