使用promises配置多个功能

ale*_*cxe 7 javascript firefox selenium angularjs protractor

这是带有量角器主题的Set firefox配置文件的后续内容.

根据setFirefoxProfilehowto,可以设置一个firefox配置文件,其中包含一个特殊的"helper"js代码,该代码使用firefox-profileq库来动态编写 firefox配置文件.

这对我有用,multiCapabilities直到我尝试使用多个浏览器并配置:

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()    
     },

     ...
}
Run Code Online (Sandbox Code Playgroud)

使用此设置我收到一个错误(这里是完整的回溯):

规格模式与任何文件都不匹配.

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

我试图在帮助器本身内部包含specscapabilities字典中,但错误仍然存​​在.

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


作为一种解决方法,我创建了一个单独的量角器配置文件,只配置了firefox(使用capabilities)并设置grunt为运行两次量角器 - 一个用于此"带有配置文件的firefox"配置,另一个用于所有其他浏览器.

han*_*uan 6

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

或者,我们可以在将已解析的功能传递到新进程之前解析启动程序中的功能; 但是,这将破坏设置代理的能力(https://github.com/angular/protractor/pull/1040),这依赖于在driverProvider设置之后解析的功能承诺.

我想不出一个简单的方法(没有大的重构),但它绝对可行.我为Protractor创建了一个问题(https://github.com/angular/protractor/issues/1594).如果这是您需要的,或者您有其他想法来实现它,请关注和/或评论它.

现在,您需要使用原始问题中提到的解决方法.

UPDATE

https://github.com/angular/protractor/pull/1629支持此功能.从量角器1.6开始(或者如果你同步到master),你可以将一个函数传递给config.getMultiCapabilitieslike onPrepareonCleanup.此函数可以返回一个promise multiCapabilties(即数组capabilities).

有关示例,请参阅https://github.com/angular/protractor/blob/master/spec/getCapabilitiesConf.js.