2014-10-27 76 views
2

我想調試/使用IRB開發代碼:如何在水豚中獲取DOM元素的HTML?

irb> require "capybara" 
irb> include Capybara::DSL 
irb> Capybara.current_driver = :selenium 
irb> visit "http://example.com" 

但我怎麼得到我發現了元素的HTML?

irb> s = find(".user-pane") 
=> #<Capybara::Element tag="nav"> 
irb> s.native.inner_html 
NoMethodError: undefined method `inner_html' for #<Selenium::WebDriver::Element:0x007fc1da191b28> 

寶石列表

capybara (2.4.4) 
nokogiri (1.5.6) 
selenium-webdriver (2.43.0) 
+0

你能否提供一個可以訪問並具有'.user-pane'的通用域?你有沒有嘗試過(查找('用戶窗格')? – Bala 2014-10-27 13:07:29

+0

@Bala,可重複使用google.com並查找(「#hplogo」) – Nakilon 2014-10-27 13:19:04

回答

6

的解決方案,我已經上找到的所以和其他地方不工作:

  • 爲什麼.inner_html不工作了?
    因爲.native現在是WebDriver,而不是Nokogiri對象。
  • 爲什麼.native.get_attribute不起作用?
    因爲該方法的名稱與Python不同。

所以答案是:s.native.attribute('outerHTML')
但是這需要近五秒完成甚至在google.com頁。

+1

Aha,你知道了。+ 1共享 – Bala 2014-10-27 14:55:50

+3

僅供參考這對水豚和Poltergeist不起作用。 page.find(...)。native返回Capybara :: Poltergeist :: Node,它沒有'attribute'方法 – Michael 2015-03-25 23:40:40

+1

對於Capybara w/Poltergeist,你可以使用'['outerHTML']',那會工作。例如:'find('#some_button')['outerHTML']' – 2017-06-23 17:46:16

0

我的水豚find('#name').native返回類型Nokogiri::XML::Element,它有一個to_html方法(等)。如果這就是native對你的回報,那麼s.native.to_html應該給你HTML。