我遇到了在Capybara注入脚本的问题。这是代码段。
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :phantomjs_options => ['--debug=no', '--ignore-ssl-errors=yes'], :js_errors => false)
end
Capybara.configure do |c|
c.javascript_driver = :poltergeist
c.default_driver = :poltergeist
c.app_host = "http://www.google.com"
c.default_wait_time = 120
end
Capybara.current_session.driver.headers = {
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}
visit('/')
Capybara.current_session.driver.execute_script("alert('Working!');")
sleep(1)
system('rm /tmp/screenshot.png')
Capybara.current_session.driver.save_screenshot('/tmp/screenshot.png')
这里我正在注入一个脚本,它会进行一些ajax调用并更改dom。但是,当我拍摄快照时,我无法在页面中看到任何更改,就好像脚本从未出现过一样。我还尝试添加一个简单的警报声明,但是没有在快照中看到警报。我在这里缺少什么?
答案 0 :(得分:2)
http://somescript.js
似乎是一个非常不可能的脚本src的URL,你确定这是一个在本地解析为脚本的东西吗?
答案 1 :(得分:2)
警告,这是一个模式对话框,不会显示在屏幕截图中。
之所以如此,是因为PhantomJS是一个无头浏览器,实际上并没有渲染整个页面,在制作截图时,整个网页内容被保存(渲染)到一个文件中(< strong>没有额外的模态窗口!)。因此,警报模式将不会出现在PhantomJs截图中。
因此,您无法截取警报。您可以做的是使用onAlert处理程序获取警报的上下文:
page.onAlert = function(msg) {
console.log('ALERT: ' + msg);
};
或者,如果您使用像Selenium这样的javascript驱动程序使用Capybara:
alert = page.driver.browser.switch_to.alert
alertTest = alert.text
alert.accept