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