node.js - 如何从 Meteor 上的 Selenium 错误中恢复?

标签 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){
        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()

关于node.js - 如何从 Meteor 上的 Selenium 错误中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38337839/

相关文章:

node.js - Redis 在生产环境中与 Node.js 结合使用

python,选择一个带有 Selenium 的文本框

javascript - _ 在 Meteor 包中使用时无法识别

javascript - Meteor:显示文档的当前用户列表

node.js - "an empty MaybeLocal"是什么意思?

node.js - Nodejs : Passport-local vs custom user auth

node.js - 编辑 req.user 对象

java - 如何等待 css 属性更改?

ruby-on-rails - 使用 xpath 在 selenium 中检索文本?

javascript - 使用 Meteor 时如何从另一个模板的辅助函数中调用模板?