Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用承诺配置多个功能_Javascript_Angularjs_Firefox_Selenium_Protractor - Fatal编程技术网

Javascript 使用承诺配置多个功能

Javascript 使用承诺配置多个功能,javascript,angularjs,firefox,selenium,protractor,Javascript,Angularjs,Firefox,Selenium,Protractor,这是本专题的后续行动 根据howto,可以设置一个firefox配置文件,并使用一个特殊的函数和库动态生成一个编码的firefox配置文件 在我尝试使用多个浏览器并配置以下浏览器之前,这对我来说是有效的: 通过此设置,我得到一个错误(完全回溯): 等级库模式与任何文件都不匹配 据我所知,这意味着firefox配置文件的设置缺少specs键。换句话说,它找不到任何要运行的测试 我已经试过了,但错误仍然存在 如果使用multiCapabilities,如何修复错误并设置firefox配置文件 作为

这是本专题的后续行动

根据howto,可以设置一个firefox配置文件,并使用一个特殊的函数和库动态生成一个编码的firefox配置文件

在我尝试使用多个浏览器并配置以下浏览器之前,这对我来说是有效的:

通过此设置,我得到一个错误(完全回溯):

等级库模式与任何文件都不匹配

据我所知,这意味着firefox配置文件的设置缺少
specs
键。换句话说,它找不到任何要运行的测试

我已经试过了,但错误仍然存在

如果使用
multiCapabilities
,如何修复错误并设置firefox配置文件



作为一种解决方法,我创建了一个单独的量角器配置文件,只配置了firefox(使用
功能
),并将
grunt
设置为运行量角器两次-一次用于此“firefox with a profile”配置,另一次用于所有其他浏览器。

现在,如果我们不使用多电容,量角器只能作为功能接受承诺。这是因为multiCapabilities在一个新流程中运行每个任务,因此无法传递承诺(函数)(单个功能可以工作,因为我们没有分叉)

或者,我们可以在将已解析的功能传递到新流程之前,解析启动器中的功能;但是,这将破坏设置代理()的功能,这依赖于driverProvider安装后将解决的功能承诺

我想不出一个简单的方法来实现这一点(不进行大规模重构),但它确实是可行的。 我为量角器()创建了一个问题。如果这是您需要的,或者您有其他想法来实施,请遵循这一点和/或对其进行评论

现在,您需要使用您在原始问题中提到的变通方法

更新

支持这一点。从量角器1.6开始(或者如果您同步到master),您可以将函数传递到
config.getMultiCapabilities
,比如
onPrepare
onCleanup
。此函数可以向
多容量
(即
功能阵列
)返回承诺

请参见示例。

以下是@hankduan发送的消息,我是如何将不同的功能组合在一起的,其中一个功能是承诺(需要设置
firefox配置文件
):


希望这对将来的人有所帮助。

我打开了一个问题。我想这就是你想要的。请对此问题发表评论,并用它来跟踪更新。@hankduan非常感谢您在功能请求中详细说明这一点。请回答(在github问题中提供了一些技术细节),我会接受。如果该功能将被实现,我们将用适当的说明更新答案。这太神奇了,尝试过了-它正在工作!(我添加了一个答案,并举例说明如何使用
getMultiCapabilities()
)配置量角器。我将向您提供额外的奖金。再次感谢!谢谢你的例子。(有一件事:你不需要setTimeout)@hankduan不知道为什么,但是没有
setTimeout()
gradutor正在退出,错误代码为100(尽管测试没有失败)。这是一本书。使用
setTimeout()
无错误,正常工作。
exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',

    multiCapabilities: [
        {
            browserName: 'chrome',
            specs: [
                'footer.disabledCookies.spec.js'
            ],
            chromeOptions: {
                prefs: {
                    'profile.default_content_settings.cookies': 2
                }
            }
        },

        ...
        // other capabilities here
        ...

        helper.getFirefoxProfile()    
     },

     ...
}
"use strict";

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

exports.config = {
    seleniumAddress: "http://127.0.0.1:4444/wd/hub",

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

        var multiCapabilities = [
            {
                browserName: "chrome",
                specs: [
                    "footer.disabledCookies.spec.js"
                ],
                chromeOptions: {
                    prefs: {
                        "profile.default_content_settings.cookies": 2
                    }
                }
            },
            {
                browserName: "chrome",
                specs: [
                    "*.spec.js"
                ],
                exclude: [
                    "footer.disabledCookies.spec.js",
                    "footer.disabledJavascript.spec.js",
                    "footer.disabledFlash.spec.js"
                ]
            },
            {
                browserName: "chrome",
                specs: [
                    "footer.disabledFlash.spec.js"
                ],
                chromeOptions: {
                    args: [
                        "--disable-internal-flash",
                        "--disable-bundled-ppapi-flash",
                        "--disable-plugins-discovery"
                    ]
                }
            }
        ];

        // Wait for a server to be ready or get capabilities asynchronously.
        setTimeout(function() {
            var firefoxProfile = new FirefoxProfile();
            firefoxProfile.setPreference("javascript.enabled", false);
            firefoxProfile.encoded(function (encodedProfile) {
                var capabilities = {
                    "browserName": "firefox",
                    "firefox_profile": encodedProfile,
                    "specs": [
                        "footer.disabledJavascript.spec.js"
                    ]
                };
                multiCapabilities.push(capabilities);
                deferred.resolve(multiCapabilities);
            });
        }, 1000);

        return deferred.promise;
    },

    ...

};