【问题标题】:How to override the default download directory in webdriverio in a mocha test?如何在 mocha 测试中覆盖 webdriverio 中的默认下载目录?
【发布时间】:2023-03-27 10:09:01
【问题描述】:

目前我在wdio.confcapabilities中设置了以下prefs

capabilities:[{
'goog:chromeOptions': {
prefs: {
    'download.default_directory': downloadDir
     }}
}]

downloadDir 被创建为全局变量:

global.downloadDir = path.join(__dirname, 'localDownload');

我在beforeTest 中创建了另一个全局变量newDwnldDirPath,以便根据每个正在执行的测试用例的测试用例编号动态创建一个文件夹。

global.newDwnldDirPath = path.join('./newDwnldDir/'+matches[0]);

+matches[0]) 使用正则表达式操作获取测试用例编号。这是有效的,我得到了为每个测试用例创建的带有测试用例编号的新下载目录,如下所示:

..
/TEST001/
/TEST002/
..

我想做的是覆盖测试用例执行中的默认下载目录,以便下载的文件转到newDwnldDirPath

测试脚本(mochajs)示例:

it('Test case doing something TEST001', function () {

        BasePage.clickDownloadFile();

}

        

因此,一旦运行,下载的文件应该转到 newDwnldDirPath,这将是 /TEST001/ 并继续。

有什么方法可以实现吗?

【问题讨论】:

    标签: javascript testing automation mocha.js webdriver-io


    【解决方案1】:

    到目前为止,我发现webdriverio中的配置不允许我们根据每个测试用例脚本的执行动态更改prefs中配置的download.default_directorycapabilities。这样做的原因是,一旦 webdriverio 开始执行测试用例,prefs 就无法修改或使用新的prefs 重新加载会话。

    我找到了一种解决方法,即使用recursive-copy npm 包(FYR:https://www.npmjs.com/package/recursive-copy)。

    目前我正在创建一个包含测试用例数量(测试用例 id)的动态文件夹,并将其用作 wdio.conf.js 中 beforeTest 中的全局变量 newDwnldDirPath global.newDwnldDirPath = path.join('./newDwnldDir/'+matches[0]);

    (matches[0] info on this is in the question)

    然后创建一个 util 用于从源 (default_directory) 到目标 (newDwnldDirPath ) 执行 recursive copy

    var copyFileRecursive = require('recursive-copy');
    var options = {
    
        filter: [
            
            'filename*.txt'
        ],
    
        rename: function(filePath) {
            return 'newFilename.txt';
        },
    
    };
    
    
    copyFileRecursive(src,dest){
            copyFileRecursive(src, dest,options)
             .on(copyFileRecursive.events.COPY_FILE_START, function(copyOperation) {
                console.info('Copying file ' + copyOperation.src + '...');
            })
            .on(copyFileRecursive.events.COPY_FILE_COMPLETE, function(copyOperation) {
                console.info('Copied to ' + copyOperation.dest);
            })
            .on(copyFileRecursive.events.ERROR, function(error, copyOperation) {
                console.error('Unable to copy ' + copyOperation.dest);
            })
            .then(function(results) {
                console.info(results.length + ' file(s) copied');
            })
            .catch(function(error) {
                return console.error('Copy failed: ' + error);
            });
        }
    
    
    

    然后在测试用例脚本中使用这个copyFileRecursive方法作为 Util.copyFileRecursive(downloadDir,newDwnldDirPath); 其中downloadDir 是默认下载目录,它是全局变量,newDwnldDirPath 是新的下载目录,例如:newDwnldDir/TEST001 等等。

    options 参数是可选的,如果您想传递通配符文件名参数、重命名文件等,可以使用该参数。在递归复制包文档中可以找到许多其他选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2017-10-17
      相关资源
      最近更新 更多