如何从meteorselenium错误恢复?

我的代码在Meteor服务器上调用(对于那些不知道meteor的人来说,它运行在Node.js之上):

var webdriver = require('selenium-webdriver') function getPage(page) { driver = driver || new webdriver.Builder().forBrowser('chrome').build(); driver.get(page).catch(function(error){ throw new Meteor.Error("Can't get page " + page) }) } 

熟悉meteor的人知道它通常应该把Meteor.Error传播给客户。 相反,Selenium捕获我的错误并退出代码1,导致服务器重新启动:

 W20160712-12:49:40.093(-7)? (STDERR) W20160712-12:49:40.104(-7)? (STDERR) /Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:654 W20160712-12:49:40.104(-7)? (STDERR) throw error; W20160712-12:49:40.105(-7)? (STDERR) ^ W20160712-12:49:40.105(-7)? (STDERR) Error: [Can't get page i] W20160712-12:49:40.118(-7)? (STDERR) at imports/somethingSel.js:35:15 W20160712-12:49:40.120(-7)? (STDERR) at ManagedPromise.invokeCallback_ (/Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:1379:14) W20160712-12:49:40.121(-7)? (STDERR) at TaskQueue.execute_ (/Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:2913:14) W20160712-12:49:40.123(-7)? (STDERR) at TaskQueue.executeNext_ (/Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:2896:21) W20160712-12:49:40.124(-7)? (STDERR) at /Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:2775:27 W20160712-12:49:40.132(-7)? (STDERR) at /Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:639:7 W20160712-12:49:40.134(-7)? (STDERR) at /Users/irinaapex/.meteor/packages/promise/.0.8.3-beta.9.1fbal0n++os+web.browser+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:32:39 => Exited with code: 1 W20160712-12:49:53.217(-7)? (STDERR) Debugger listening on port 49906 => Meteor server restarted 

看来,为了成功地将错误消息传递给客户端,我需要阻止Selenium拦截错误。 我怎么做?

2件事情在这里我相信:

1)调用驱动程序来获取页面是asynchronous的,所以你应该真的包装成一个Meteor.wrapAsync()调用。

2)如果你这样做,我会认为错误将被同步发送到呼叫的返回值。 或者你可以捕捉它,并重新抛出错误作为Meteor.error()