【问题标题】:How to get HTML of DOM element in Capybara?如何在 Capybara 中获取 DOM 元素的 HTML?
【发布时间】:2014-10-27 12:54:18
【问题描述】:

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

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)

【问题讨论】:

  • 您能否提供一个可以访问并具有.user-pane 的通用域?你试过find('user-pane)吗?
  • @Bala,可用于 google.com 和 find("#hplogo")

标签: ruby selenium-webdriver capybara inspect


【解决方案1】:

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

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

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

【讨论】:

  • 啊哈,明白了。+1 分享
  • 仅供参考,这对 Capybara 和 Poltergeist 不起作用。 page.find(...).native 返回 Capybara::Poltergeist::Node,它没有“属性”方法
  • 对于 Capybara w/Poltergeist,您可以使用s['outerHTML'],这样就可以了。例如:find('#some_button')['outerHTML']
【解决方案2】:

我的 Capybara find('#name').native 返回类型 Nokogiri::XML::Element,它有一个 to_html 方法(等等)。如果这是 native 为您返回的内容,那么 s.native.to_html 应该为您提供 HTML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多