Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用Capybara Webkit驱动程序从更新的DOM中提取HTML?_Ruby_Rspec_Capybara_Capybara Webkit - Fatal编程技术网

Ruby 如何使用Capybara Webkit驱动程序从更新的DOM中提取HTML?

Ruby 如何使用Capybara Webkit驱动程序从更新的DOM中提取HTML?,ruby,rspec,capybara,capybara-webkit,Ruby,Rspec,Capybara,Capybara Webkit,我有一个向DOM中注入一些文本的页面:“Success!” Javascript代码之所以有效,是因为我在屏幕截图中看到了预期的文本,并且规范通过了: page.visit '/' save_and_open_screenshot expect( page).to have_content 'Success!' puts page.html 但是,page.html不会更新。它没有注入的文本 如何获取更新DOM的HTML 编辑:我发现问题是由iframe引起的。iframe不会添加到pa

我有一个向DOM中注入一些文本的页面:
“Success!”

Javascript代码之所以有效,是因为我在屏幕截图中看到了预期的文本,并且规范通过了:

page.visit '/'

save_and_open_screenshot

expect( page).to have_content 'Success!'

puts page.html
但是,
page.html
不会更新。它没有注入的文本

如何获取更新DOM的HTML

编辑:我发现问题是由iframe引起的。iframe不会添加到page.html,但会添加到页面


编辑2:结果是“成功!”内容不在iframe中。因此,可能上下文正在切换到iframe。

找到了一个可行的解决方法:

html = page.evaluate_script( 'document.documentElement.innerHTML' )

我想可以使用JS或jQuery finder为整个页面正文查找所需的
,您可以这样做:

page.body
特别是任何元素

page.find(".my-div").base.inner_html

在这里查看完整的API:

我想我已经尝试过了。我认为当JS在页面加载后更新DOM时,它不起作用。它适用于我正在做的大量动态jsdom更新。可能还有别的事情。我已经浏览了Webkit源代码,可以看到它调用了对Webkit服务器的getInnerHTML调用,该调用委托给capybara.js调用this.getNodes[index].innerHTML。因此,只要节点在dom中,它就应该工作。另外,另一个提示:出于某种原因,在我们的应用程序中,我们使用了automatic_reload=false。当我们最近升级到最新版本(1.4.x->1.7.x)时,我们遇到了各种各样的奇怪问题,这些问题最终通过删除这个默认为true的设置得到了解决。此设置会影响dom中是否可以有未连接的节点。