2

我有一个场景,我需要单击一个链接,该链接将触发.CSV文件下载到默认位置(/tmp),它在 chrome 和 firefox 浏览器上都可以正常工作,但有时基于 conf.js 中的 multiCapabilities 配置它只能在单个浏览器上工作(意味着一组配置有助于 chrome 正常工作,但不是 firefox,另一组导致 firefox 工作但不是 chrome)。我使用以下 stackoverflow 帖子作为参考:Protractor e2e 测试下载pdf文件的案例。而且我的尝试以某种方式工作得很好,但是基于我使用的 multiCapabilities 配置,脚本仅在 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(下载pdf文件的量角器e2e测试用例)我在我的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 中提到的功能和 multiCapabilities,当我运行我的脚本时,它只在 Firefox 上而不是在 chrome 上执行脚本。关于如何解决这个问题的任何想法?我的要求是登录到 chrome,执行 csv 下载,从 chrome 中注销,然后登录到 firefox 并做同样的事情。

任何帮助将不胜感激..

4

1 回答 1

1

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

注意:这里我用 Promise 配置了多种功能。

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”、“文本/逗号分隔值、文本/csv、应用程序/csv、应用程序/excel、应用程序/vnd.ms-excel、应用程序/vnd.msexcel、文本/anytext ” ==> 使用的 mime 类型是 csv mime 类型。

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

于 2016-08-10T04:17:07.163 回答