Node.js 如何从流星上的硒错误中恢复?

Node.js 如何从流星上的硒错误中恢复?,node.js,selenium,meteor,selenium-webdriver,selenium-chromedriver,Node.js,Selenium,Meteor,Selenium Webdriver,Selenium Chromedriver,我的代码在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){

我的代码在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截获错误。我该怎么做呢?

这里发生的两件事我相信:

1) 对驱动程序进行的获取页面的调用是异步的,因此您应该将其包装为
Meteor.wrapAsync()
调用


2) 如果您这样做,我认为错误将同步发送到调用的返回值。或者您可以捕获它,然后将错误作为
Meteor.error()

抛出。您是否可以处理异常?是的,但我需要抛出Meteor.error,因为这会导致Meteor将拒绝传播到客户端。可以找到解决方法,但这是Meteor中通常处理错误的方式。