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

3

我正在尝试为Protractor动态设置Chrome下载路径,配置信息保存在conf.js中。我们的web服务会导出一个文件,我正在编写一个测试用例来验证这个文件。目前,我正在硬编码浏览器的下载路径。问题是我的团队成员以及构建机也将运行此测试,我无法选定一个适用于每个开发和构建机的单一下载路径。经过一些阅读,我认为最好的解决方案是从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解决之前就完成了构建配置对象的过程。在getCapabilities上使用then函数也没有帮助,因为我无法在then函数中构建配置对象的capabilities部分。我无法在onPrepare函数之外调用getCapabilities,因为conf.js本身没有它的上下文。对于团队的设置,设置网络路径也不可行。
还有其他人处理过类似的问题吗?是否有其他方法可以以编程方式设置Chrome的下载路径?
1个回答

0

这可能不是您期望的解决问题的方式,但您可以运行

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

如果用户足够精通,能够知道、找到或者存储这些信息。

编辑:

你可以尝试使用{{link1:.execute()}}来强制browser.getCapabilities();在执行下一条语句之前完成。

通常由protractor.promise.controlFlow().execute(myPromise)调用。

然而,我认为execute()也会返回一个promise,所以你可能会回到起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接