gpt4 book ai didi

angularjs - Protractor 中的多个 Firefox 配置文件

转载 作者:行者123 更新时间:2023-11-28 20:20:20 25 4
gpt4 key购买 nike

正在关注 Configuring multiple capabilities with promises主题。

用例:我有两个单独的测试,需要在 禁用 javascript禁用本地存储 的情况下启动 Firefox。这意味着我需要两个带有 javascript.enabled = falsedom.storage.enabled = false 所需功能/首选项集的 firefox 配置文件。

我正在使用 Protractor 1.6 中引入的 getMultiCapabilities()。直到这一刻,我只需要一个自定义的 firefox 配置文件就可以了,这里是配置:

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

var multiCapabilities = [
{
browserName: "chrome",
specs: [
"*.spec.js"
],
exclude: [
"footer.disabledJavascript.spec.js"
]
}
];

// 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;
},

问题:现在我需要第二个带有 dom.storage.enabled = false 的 firefox 配置文件实例,但我不知道该如何解决 在这种情况下延迟,因为现在有两个 encoded() 调用和两个添加到 multiCapabilities 的功能。

问题:如何使用 getMultiCapabilities 配置多个 firefox 配置文件?


我让它工作的唯一方法是将一个配置文件嵌套到另一个配置文件中,并在最深层次上调用 resolve()(如果有两个配置文件,它可能没问题 - 但这个解决方案并不是真的规模):

var multiCapabilities = [
{
browserName: "chrome",
specs: [
"*.spec.js"
],
exclude: [
"footer.disabledJavascript.spec.js",
"disabledLocalStorage.spec.js"
]
}
];

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

// profile with disabled local storage
var newFirefoxProfile = new FirefoxProfile();
newFirefoxProfile.setPreference("dom.storage.enabled", false);
newFirefoxProfile.encoded(function (newEncodedProfile) {
var newCapabilities = {
browserName: "firefox",
directConnect: true,
firefox_profile: newEncodedProfile,
specs: [
"disabledLocalStorage.spec.js"
]
};
multiCapabilities.push(newCapabilities);
deferred.resolve(multiCapabilities);
});
});
}, 1000);

return deferred.promise;
},

最佳答案

您可以使用 q.all 来执行此操作。本质上你想做这样的事情:

return q.all([
capabilityPromise1,
capabilityPromise2,
...
]);

具体如何获得能力 promise 取决于您。这是一种通用方法:

var makeFirefoxProfile = function(preferenceMap, capabilityMap) {
var deferred = q.defer();
var firefoxProfile = new FirefoxProfile();
// TODO: iterate over preferenceMap and set preference for each
firefoxProfile.encoded(function (encodedProfile) {
var capabilities = {
"browserName": "firefox",
"firefox_profile": encodedProfile,
};
// TODO: iterate over capabilityMap and set key/value for each
deferred.resolve(capabilities);
});
return deferred.promise;
};

getMultiCapabilities: function() {
return q.all([
makeFirefoxProfile({javascript.enabled: false}, {specs: ['spec1.js']})
makeFirefoxProfile({dom.storage.enabled: false}, {specs: ['spec2.js']})
]);
}

如果您不想创建辅助函数并希望在 1 个函数中生成功能 promise ,那由您决定。本质上,我认为这里的关键是使用 q.all,其余的实际上取决于您的功能对象的复杂程度以及您希望如何构建代码

关于angularjs - Protractor 中的多个 Firefox 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28619251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com