如何在Protractor中以编程方式设置下载路径?

时间:2015-05-04 13:59:19

标签: javascript protractor selenium-chromedriver

我正在尝试在conf.js中为Protractor动态设置Chrome下载路径。我们的webservice导出一个文件,我正在编写一个测试,需要知道下载文件的位置才能验证它。现在,我很难设置浏览器的下载路径。问题是我的团队的其他成员和构建机器也将运行此测试,并且没有一个我可以选择的下载路径可以在每个开发和构建机器上运行。在做了一些阅读之后,我认为最好的解决方案是从onPrepare函数中的getCapabilities()函数获取用户数据目录,然后将其设置为下载目录,如下所示:

onPrepare: function () {
    var jasmineReporters = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter( { 
        savePath: 'reports', consolidateAll: true } ));
    var cap = browser.getCapabilities();
    // Set prefsDict using cap.caps_.userDataDir
},
capabilities: {
    'chromeOptions': {
        'prefs': prefsDict
    }
}

这将允许代码是动态的,但getCapabilities返回一个promise,因此上面的代码不起作用,因为conf.js将在promise解析之前完成构造config对象。在getCapabilities上使用then函数没有用,因为我无法在then函数中构造配置对象的能力部分。我无法在onPrepare函数之外调用getCapabilities,因为conf.js本身没有上下文。对于团队的设置,设置网络路径也是不可行的。

有没有其他人处理过这样的事情?有没有其他方法可以通过编程方式设置Chrome的下载路径?

1 个答案:

答案 0 :(得分:0)

这可能无法以您喜欢的方式解决问题,但您可以运行

protractor conf.js --capabilities.chromeOptions.prefs 'path/to/user/folder'

如果用户足够精明,可以知道,查找或存储该信息。

编辑:

您可以使用.execute()强制browser.getCapabilities();完成,然后再转到下一个语句。

通常由protractor.promise.controlFlow().execute( myPromise )

调用

但是,我认为execute()也会返回一个承诺,所以你可能会回到原点。

相关问题