Javascript Capybara-注入脚本标记并等待异步任务完成
我有一个问题,注入脚本在水豚。下面是代码片段Javascript Capybara-注入脚本标记并等待异步任务完成,javascript,ruby-on-rails,selenium,capybara,poltergeist,Javascript,Ruby On Rails,Selenium,Capybara,Poltergeist,我有一个问题,注入脚本在水豚。下面是代码片段 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|
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。但是,当我拍摄快照时,我无法看到页面中的任何更改,就好像脚本从未出现过一样。我还尝试添加一个简单的警报语句,但在快照中看不到警报。我在这里遗漏了什么?
http://somescript.js
对于您的脚本src来说似乎是一个非常不可能的URL,您确定这是一个本地解析为脚本的URL吗?警报,它是一个模式对话框,不会显示在屏幕截图中
之所以这样做,是因为PhantomJS是一款无头的浏览器,它实际上不会呈现整个页面,在制作屏幕截图时,整个网页内容会保存(呈现)到一个文件中(,没有额外的模式窗口!)。因此,警报模式根本不会出现在PhantomJs屏幕截图中
所以,你不能截图警告。您可以通过处理程序获取警报的上下文:
或者,如果您使用像Selenium这样的javascript驱动程序使用Capybara:
alert = page.driver.browser.switch_to.alert
alertTest = alert.text
alert.accept
为了保密,我用虚拟URL替换了代码段中的脚本,但我在代码中使用了工作URL。您还替换了什么?这些都可能是问题的潜在原因。请整理一份表格来说明问题所在(我们可以自己运行的东西)。显示脚本代码,如果需要,可以使用
alert()
,这样我们就有希望能够实际调试该问题。现在通过一个alert语句和工作URL简化了示例。问题是我在快照中没有看到警报弹出窗口。谢谢您的回答。其他异步交互呢,比如加载改变dom的js脚本。这些更改是PhantomJS能够捕获的吗?如果您在将更改dom的函数中弹出正确的事件处理程序或事件触发,这是可能的。
alert = page.driver.browser.switch_to.alert
alertTest = alert.text
alert.accept