Casperjs在评估错误时不会触发page.error事件

时间:2014-01-13 06:45:57

标签: events listener phantomjs casperjs

我想在Casper的远程页面上捕获错误。

casper.thenEvaluate ->
  document.querySelector("#selector-doesnt-exist").attribute-doesnt-exist = 'value'

我设置了以下侦听器:

casper.on "page.error", (message, trace) ->
  console.log(message)

casper.on "remote.message", (message) ->
  console.log(message)

评估失败时,这些都没有被触发。有没有办法在远程页面上听错?

1 个答案:

答案 0 :(得分:0)

我也不知道怎么做,而且可能有更合适的方法。

假设您只想捕获自己的评估代码中的错误(而不是您正在加载的网站上的错误),一种解决方案是将casper评估函数包装为包含try-catch,并处理从评估中返回错误:

casper.myevaluate = (fn, args...) ->
  s = @evaluate (fn,args) ->
    try
      fn.apply(this,args)
    catch e
      return {'ourError':e}
  , fn, args

  if s.ourError?
      ErrorHandler.Exception(s.ourError)
  return s

E.g。主叫:

casper.myevaluate ()-> silly

...会使用ReferenceError: Can't find variable: silly

调用您的错误处理程序代码