Angularjs 用于下载文件的量角器e2e测试用例可以在chrome上正常工作,但不能在firefox上正常工作,反之亦然?

Angularjs 用于下载文件的量角器e2e测试用例可以在chrome上正常工作,但不能在firefox上正常工作,反之亦然?,angularjs,firefox,protractor,webdriverjs,firefox-profile,Angularjs,Firefox,Protractor,Webdriverjs,Firefox Profile,我有一个场景,我需要点击一个链接,该链接将触发.CSV文件下载到一个默认位置(/tmp),它在chrome和firefox浏览器上都可以正常工作,但基于conf.js中的多容量配置,有时它只在单个浏览器上工作(意味着一组配置有助于chrome正常工作,但对firefox无效,而另一组则导致firefox正常工作,但对chrome无效)。我使用了下面的stackoverflow帖子作为参考:。我的尝试在某种程度上运行良好,但基于我使用的多容量配置,脚本仅在chrome或firefox上运行 请注意

我有一个场景,我需要点击一个链接,该链接将触发.CSV文件下载到一个默认位置(/tmp),它在chrome和firefox浏览器上都可以正常工作,但基于conf.js中的多容量配置,有时它只在单个浏览器上工作(意味着一组配置有助于chrome正常工作,但对firefox无效,而另一组则导致firefox正常工作,但对chrome无效)。我使用了下面的stackoverflow帖子作为参考:。我的尝试在某种程度上运行良好,但基于我使用的多容量配置,脚本仅在chrome或firefox上运行

请注意,chrome将与以下配置一起工作,在这里我没有添加firefox配置文件设置。因此firefox中的文件下载部分不会与以下配置一起工作

multiCapabilities: [
    {
        'browserName': 'chrome',
        'platform': 'ANY',
        'chromeOptions': {
            args: ['--no-sandbox', '--test-type=browser'],
            prefs: {
                download: {
                    'prompt_for_download': false,
                    'directory_upgrade': true,
                    'default_directory': '/tmp'
                }
            }
        }
    },
    {
        'browserName': 'firefox',
    }
],

基于上述url(),我在util文件中添加了函数getFirefoxProfile():common.js

var getFirefoxProfile = function() {
    var deferred = q.defer();
    var firefoxProfile = new FirefoxProfile();
    firefoxProfile.setPreference("browser.download.folderList", 2);
    firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
    firefoxProfile.setPreference("browser.download.dir", '/tmp');
    firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/comma-separated-values, text/csv, application/csv, application/excel, application/vnd.ms-excel, application/vnd.msexcel, text/anytext");
    firefoxProfile.encoded(function(encodedProfile) {
        var multiCapabilities = [{
            browserName: 'firefox',
            firefox_profile : encodedProfile
        }];
        deferred.resolve(multiCapabilities);
    });
    return deferred.promise;
}
exports.getFirefoxProfile = getFirefoxProfile;
然后我更新了conf.js,如下所示:

getMultiCapabilities: com.getFirefoxProfile,
multiCapabilities: [
    {
        'browserName': 'chrome',
        'platform': 'ANY',
        'chromeOptions': {
            args: ['--no-sandbox', '--test-type=browser'],
            prefs: {
                download: {
                    'prompt_for_download': false,
                    'directory_upgrade': true,
                    'default_directory': '/tmp'
                }
            }
        }
    },
    {
        'browserName': 'firefox',
    }
],
getMultiCapabilities:com.getFirefoxProfile当在conf.js中使用时,将覆盖conf.js中提到的功能和多容量,当我运行脚本时,它只在firefox上执行脚本,而不在chrome上执行。 我的要求是登录到chrome,执行csv下载,从chrome注销,然后登录到firefox并执行同样的操作


非常感谢您的帮助。

对于向多个浏览器添加功能(chrome和firefox),我们需要使用多功能,并添加每个浏览器的功能(firefox和chrome),如下所示

注意:我在这里配置了多功能和承诺

var q = require("q");
var FirefoxProfile = require("firefox-profile");

exports.config = {
    directConnect: true,

    onPrepare: function () {
        browser.driver.getCapabilities().then(function(caps){
            browser.browserName = caps.get('browserName');
    });
},

maxSessions: 1,

getPageTimeout: 150000,

allScriptsTimeout: 150000,

params: require('../testdata/data.json'),

framework: 'jasmine2',

specs: ['../unit_test/*_spec.js'],

jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 150000
},

//seleniumAddress: "http://127.0.0.1:4444/wd/hub",

getMultiCapabilities: function() {
    var deferred = q.defer();

    var multiCapabilities = [
        {
            'browserName': 'chrome',
            'platform': 'ANY',
            'chromeOptions': {
                args: ['--no-sandbox', '--test-type=browser'],
                prefs: {
                    download: {
                        'prompt_for_download': false,
                        'directory_upgrade': true,
                        'default_directory': '/tmp'
                    }
                }
            }
        },
    ];

    // Wait for a server to be ready or get capabilities asynchronously.
    setTimeout(function() {
        var firefoxProfile = new FirefoxProfile();
        firefoxProfile.setPreference("javascript.enabled", false);
        firefoxProfile.setPreference("browser.download.folderList", 2);
        firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
        firefoxProfile.setPreference("browser.download.dir", '/tmp');
        firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/comma-separated-values, text/csv, application/csv, application/excel, application/vnd.ms-excel, application/vnd.msexcel, text/anytext");
        firefoxProfile.encoded(function (encodedProfile) {
            var capabilities = {
                "browserName": "firefox",
                "firefox_profile": encodedProfile
            };
            multiCapabilities.push(capabilities);
            deferred.resolve(multiCapabilities);
        });
    }, 1000);
    return deferred.promise;
    }
};
默认下载位置设置为/tmp对于浏览器和firefox来说,要设置功能,我们需要创建firefox配置文件并设置首选项

注意: “browser.download.folderList”,2==>将下载位置设置为用户定义的。传递值0将下载设置为桌面,传递值1将下载到默认下载位置

另外还有“browser.helperApps.neverAsk.saveToDisk”,“文本/逗号分隔值,text/csv,application/csv,application/excel,application/vnd.ms-excel,application/vnd.msexcel,text/anytext”=>使用的mime类型是csv mime类型。


如果您的下载文件是pdf或其他文件,请将csv mime类型替换为您的文件mime类型。

您好,您能为我编写pdf mime类型吗?@vsathyak