Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Javascript Capybara-注入脚本标记并等待异步任务完成_Javascript_Ruby On Rails_Selenium_Capybara_Poltergeist - Fatal编程技术网

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