2017-09-12 113 views
1

我试图用量角器实现与firefox和铬多浏览器测试。但对于测试,我需要更改下载路径。在铬,它的工作,但在Firefox中,我发现的解决方案涉及改变Firefox的配置文件。我还找到了一个办法,就像这个问题的答案Set firefox profile protractor一样。错误:profile.getTemplateDir不是函数

但是,当我尝试运行导航器的多个实例旁边的修改后的配置文件的Firefox,我总是得到一个错误,如profile.getTemplateDir is not a function

这里是我的量角器配置文件中的代码:

var q = require('q'); 
var FirefoxProfile = require("selenium-webdriver/firefox").Profile 

function getProfiles() { 
    let deferred = q.defer(); 

    let multiCapabilities = [{ 
    browserName: 'chrome' 
    }] 
    deferred.resolve(multiCapabilities); 
    let firefoxProfile = new FirefoxProfile(); 
    firefoxProfile.setPreference("browser.download.folderList", 2); 
    firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false); 
    firefoxProfile.setPreference("browser.download.dir", '/tmp'); 

    let foxCapabilities = { 
    browserName: 'firefox', 
    firefox_profile: firefoxProfile 
    }; 
    multiCapabilities.push(foxCapabilities); 

    deferred.resolve(multiCapabilities); 
    return deferred.promise; 
} 

exports.config = { 
    seleniumAddress: "http://localhost:4444/wd/hub", 
    specs: [ 
    'spec.js' 
    ], 
    framework: 'jasmine2', 
    getMultiCapabilities: getProfiles, 
    jasmineNodeOpts: { 
    defaultTimeoutInterval: 30000 
    }, 
}; 

有谁知道为什么会触发此错误以及如何解决它?

感谢

+0

我觉得你的问题是,个人资料正在创建一次,由框架 –

+0

此代码对Firefox的一个实例重复使用,但如果什么工作我尝试添加例如chrome或firefox浏览器的另一个实例,然后错误被触发 – aozora

+0

是的,因为代码在第二次调用时没有生成新的配置文件对象。你需要调试。 –

回答

0

所以我挖这个问题调试代码,这似乎是限制/错误,目前在硒的网络驱动器

getMultiCapabilities返回多个浏览器,然后量角器创建的叉子过程运行测试

Fork Process

这个分叉过程,然后发送您的JSON

创建配置文件

ChildProcess Send

的子进程只能以文本形式接收JSON数据,而不是在Profile对象

Child Process Jsonify

后来createGeckodriver函数调用配置文件对象的形式。但由于createGeckodriver代码它总是期待一个配置文件对象

Create GeckoDriver profile

因此需要固定在硒的webdriver本身这个代码,它应该检查是否发送的个人资料已被编码或不是。此外,您使用的代码需要修正以便对配置文件进行编码。下面是一旦硒驱动程序进行了修补,允许发送编码的个人资料

var firefox = require('selenium-webdriver/firefox'); 
var q = require('q'); 
var FirefoxProfile = require("selenium-webdriver/firefox").Profile 

var makeFirefoxProfile = function (preferenceMap) { 
    var deferred = q.defer(); 
    var firefoxProfile = new FirefoxProfile(); 
    for (var key in preferenceMap) { 
     firefoxProfile.setPreference(key, preferenceMap[key]); 
    } 

    firefoxProfile.encode().then(function(encodedProfile){ 
     cap = { 
      "browserName": "firefox", 
      marionette: true, 
      "firefox_profile": encodedProfile, 
     }; 

     deferred.resolve(cap); 
    }); 

    return deferred.promise; 
}; 

exports.config = { 
    seleniumAddress: "http://localhost:4444/wd/hub", 
    specs: [ 
     'spec.js' 
    ], 
    framework: 'jasmine', 
    getMultiCapabilities: function() { 
     return q.all([ 
      { 
       browserName: 'chrome' 
      }, 

      makeFirefoxProfile(
       { 
        "browser.download.folderList": 2, 
        "browser.download.dir": "/path/to/save/downloads", 
        "browser.helperApps.neverAsk.saveToDisk": "application/zip" 
       } 
      ) 
     ]); 
    }, 
    jasmineNodeOpts: { 
     defaultTimeoutInterval: 180000 
    } 
}; 
+0

遇到同样的问题 - 感谢您的调查!我只是想知道你使用的量角器和selenium-webdriver的版本,以及它是否已经修复? – Jack