2

我的代碼,由一種稱爲流星服務器上(對於那些誰不知道流星,它運行在Node.js的頂部):如何從流星的Selenium錯誤中恢復?

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) 
    }) 
} 

那些熟悉流星知道它應該正常傳播流星錯誤給客戶。相反,硒映入我的錯誤,並與代碼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 

看來,我順利過關錯誤消息客戶端,我需要防止硒截獲的錯誤。我怎麼做?

+0

有沒有例外可以處理? –

+0

是的,但我需要拋出Meteor.Error,因爲這會導致Meteor將拒絕傳播給客戶端。可以找到解決方法,但這是錯誤通常在Meteor中處理的方式。 –

回答

0

兩件事情會在這裏,我相信:

1)在調用驅動程序來獲取頁面是異步的,所以你真的應該換到Meteor.wrapAsync()調用此。 2)如果你這樣做,我會認爲錯誤將被同步發送到呼叫的返回值。或者你可以抓到它,然後重新拋出錯誤爲Meteor.error()