如何在Capybara中获取DOM元素的HTML?

Nak*_*lon 2 ruby inspect capybara selenium-webdriver

我想使用irb调试/开发代码:

irb> require "capybara"
irb> include Capybara::DSL
irb> Capybara.current_driver = :selenium
irb> visit "http://example.com"
Run Code Online (Sandbox Code Playgroud)

但是如何获得我找到的元素的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>
Run Code Online (Sandbox Code Playgroud)

宝石清单

capybara (2.4.4)
nokogiri (1.5.6)
selenium-webdriver (2.43.0)
Run Code Online (Sandbox Code Playgroud)

Nak*_*lon 7

我在SO和其他地方发现的解决方案不起作用:

  • 为什么.inner_html不再工作了?
    因为.native现在是WebDriver,而不是Nokogiri对象.
  • 为什么.native.get_attribute不起作用?
    因为该方法的名称与Python不同.

所以答案是:s.native.attribute('outerHTML')
但即使在google.com页面上也需要5秒钟才能完成.

  • 仅供参考,这对Capybara和Poltergeist不起作用.page.find(...).native返回Capybara :: Poltergeist :: Node,它没有'attribute'方法 (3认同)