在webdriver上下文之外使用WebDriverJS承诺

时间:2014-10-25 19:43:22

标签: javascript node.js selenium-webdriver promise

我正在尝试在Webdriver上下文之外使用WebDriverJS promise。我有一个实用程序,可以启动代理,设置自定义标头,停止代理等。我想在启动浏览器之前启动并设置自定义标头(在初始化webdriver之前)。该实用程序中的所有方法都返回WebdriverJS的承诺。这是代码,

BrowserProxy.prototype = {
'start': function () {
        var d = webdriver.promise.defer();
        someAsync(
          //here promise is either fulfilled or rejected;
          //d.reject(err) or d.fulfill();
        );
        return d;
 },
 'setHeaders': function () {
    //similar stuff like start method
 },
 'stop': function () {
    //similar stuff like start method
 }
} 

在这个文件之外,我在下面做,但是在浏览器启动之前所有代理方法都会执行。

browserProxy.start();
//initialize driver
browserProxy.setHeaders();
driver.get('http://www.google.com);
browserProxy.stop();

但是如果我用then方法链接调用,则需要流程方法。我不知道为什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我认为你的问题的答案是:Selenium" Control Flow"。控制流包含所有对selenium API的调用,如下所述:Control Flow

如果你想按顺序执行"" (同步)一些" async"在selenium上下文中的任务,您应该将它添加到主控制流。 (请注意,您也可以创建自定义流程)

您的代码应如下所示:

BrowserProxy.prototype = {
'start': function () {
        var flow = webdriver.promise.controlFlow();
        flow.execute(function(){
            var aPromiseToResolveWhenAsyncTaskEnds = webdriver.promise.defer();
            doAnAsyncTask().then(function(){
               aPromiseToResolveWhenAsyncTaskEnds.fulfill();
            });
            return aPromiseToResolveWhenAsyncTaskEnds.promise;
          });
 },
 'setHeaders': function () {
    //similar stuff like start method
 },
 'stop': function () {
    //similar stuff like start method
 }
}