在执行量角器项目时获取Mozilla Firefox的堆栈错误

时间:2017-06-26 18:15:34

标签: javascript protractor

//Config.js 

*当我尝试在mozilla firefox上执行此脚本时收到以下错误消息。

var relativePath = __dirname + '/e2e/';
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
multiCapabilities: [
    {
        browserName: 'chrome'
shardTestFiles: true,
        maxInstances: 1,
        chromeOptions: {
            args: [
                '--disable-infobars',
                '--disable-extensions',
                'verbose',
                'log-path=./reports/chromedriver.log'
            ],
            prefs: {
                'profile.password_manager_enabled': false,
                'credentials_enable_service': false,
                'password_manager_enabled': false
            }
        }
    },
{
        browserName: 'firefox',
        marionette: 'true',
 },
framework: 'jasmine2',

  suites: {
    em2_login: ['e2e/tests/login/login.spec.js'],
},
params: {
    siteUrl: ''
},
onPrepare: function () {
    browser.manage().timeouts().pageLoadTimeout(9000);

    browser.manage().timeouts().implicitlyWait(9000);
}
};

// *错误讯息 <>            失败:超时     构建信息:版本:' 3.4.0',修订版:'未知',时间:'未知'     系统信息:主持人:' RANGA-DT',ip:' 172.28.131.6',os.name:' Windows 7',os.arch:&# 39; amd64',os.version:' 6.1',java.version:' 1.8.0_131'     驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver     功能[{moz:profile = C:\ Users \ sranga \ AppData \ Local \ Temp \ rust_mozprofile.7BPiP8PPD71D,rotate = false,timeouts = {implicit = 0.0,pageLoad = 300000.0,script = 30000.0},pageLoadStrategy = normal,platform = ANY,specificationLevel = 0.0,moz:accessibilityChecks = false,acceptInsecureCerts = false,browserVersion = 54.0,platformVersion = 6.1,moz:processID = 20000.0,browserName = firefox,javascriptEnabled = true,platformName = windows_nt}]         会话ID:094df1fd-7b62-49d4-9552-b47230c02d01     堆:     ScriptTimeoutError:超时     构建信息:版本:' 3.4.0',修订版:'未知',时间:'未知'     系统信息:主持人:' RANGA-DT',ip:' 172.28.131.6',os.name:' Windows 7',os.arch:&# 39; amd64',os.version:' 6.1',java.version:' 1.8.0_131'     驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver     功能[{moz:profile = C:\ Users \ sranga \ AppData \ Local \ Temp \ rust_mozprofile.7BPiP8PPD71D,rotate = false,timeouts = {implicit = 0.0,pageLoad = 300000.0,script = 30000.0},pageLoadStrategy = normal,platform = ANY,specificationLevel = 0.0,moz:accessibilityChecks = false,acceptInsecureCerts = false,browserVersion = 54.0,platformVersion = 6.1,moz:processID = 20000.0,browserName = firefox,javascriptEnabled = true,platformName = windows_nt}]         会话ID:094df1fd-7b62-49d4-9552-b47230c02d01         在WebDriverError(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ error.js:27:5)         在ScriptTimeoutError(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ error.js:203:5)         at Object.checkLegacyResponse(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ error.js:505:15)         at parseHttpResponse(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ http://js:509:13)         at doSend.then.response(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ http.js:440:13)         at process._tickCallback(internal / process / next_tick.js:109:7)     来自:任务:Protractor.waitForAngular() - 定位器:通过(部分链接文本,付款)         在thenableWebDriverProxy.schedule(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ webdriver.js:816:17)         在ProtractorBrowser.executeAsyncScript_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ protractor \ lib \ browser.ts:609:24)         在angularAppRoot.then(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ protractor \ lib \ browser.ts:643:23)         在ManagedPromise.invokeCallback_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:1366:14)         在TaskQueue.execute_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:2970:14)         在TaskQueue.executeNext_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:2953:27)         在asyncRun(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:2813:27)         在C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:676:7Error         在ElementArrayFinder.applyAction_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ protractor \ lib \ element.ts:482:23)         在ElementArrayFinder。(匿名函数)[点击](C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ protractor \ lib \ element.ts:96:21)         在ElementFinder。(匿名函数)[点击](C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ protractor \ lib \ element.ts:873:14)         在clickPaymentButton(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ e2e \ pages \ payment \ singlepayment.po.js:4:55)         在对象。 (C:\ Users \用户sranga \ em2_automation \量角器\消费者\ E2E \测试\付款\ singlepayment.spec.js:20:15)         在C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ jasminewd2 \ index.js:112:25         在新的ManagedPromise(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:1067:7)         在ControlFlow.promise(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:2396:12)         at schedulerExecute(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ jasminewd2 \ index.js:95:18)         在TaskQueue.execute_(C:\ Users \ sranga \ em2_automation \ Protractor \ consumer \ node_modules \ selenium-webdriver \ lib \ promise.js:2970:14)     来自:任务:在控制流程中运行它("应该有一个标题")         在对象。 (C:\ Users \用户sranga \ em2_automation \量角器\消费者\ node_modules \ jasminewd2 \ index.js:94:19)     从异步测试:     错误     在套房。 (C:\ Users \用户sranga \ em2_automation \量角器\消费者\ E2E \测试\付款\ singlepayment.spec.js:11:2)         在对象。 (C:\ Users \用户sranga \ em2_automation \量角器\消费者\ E2E \测试\付款\ singlepayment.spec.js:7:1)         在Module._compile(module.js:570:32)         在Object.Module._extensions..js(module.js:579:10)         在Module.load(module.js:487:32)         在tryModuleLoad(module.js:446:12)

1 个答案:

答案 0 :(得分:1)

由于firefox使用的网络驱动程序发生了变化,过去几天我一直在尝试升级到最新版本的Firefox,因为它已经停留在FF V46上一段时间了。看看你在评论中粘贴的内容,没有足够的信息让我说出确切的错误,但我亲身经历了一些让firefox以可靠的方式工作的问题。但我会分享到目前为止我发现的内容。量角器有5 ways来设置selenium服务器。下面我已经说明了什么对我有用,然后没有。

尽管有很多方法可以让量角器运行测试,但我能用Firefox成功完成它的唯一方法是通过webdriver-manager启动独立服务器,在我的protractor.conf文件中指定seleniumAddress,然后使用另一个终端窗口执行我的测试。

我不喜欢全局安装npm模块,尽管几乎每个阳光下的量角器教程都在步骤#1中运行“npm install protractor -g”

我所做的是在我的package.json文件中添加它:

"scripts": { "e2e": "node node_modules/protractor/bin/webdriver-manager update && node node_modules/protractor/bin/webdriver-manager start &" }

您可以通过运行“npm run e2e”从项目根目录执行此操作。 这使我可以在本地更新最新的webdriver-manager驱动程序,并在默认地址启动独立的selenium服务器。在protractor.conf中,您需要确保通过在exports.config中指定选项seleniumAddress来配置您的量角器测试以连接到已经运行的selenium服务器,就像这样“

    exports.config = {
         // location of your E2E test specs
         specs: [
             'src/e2e/**/*.spec.js'
         ],   
         seleniumAddress: 'http://localhost:4444/wd/hub' //this tells protractor to connect to the server you started using 'npm run e2e' 
         directConnect: false,
         chromeOnly: false,
         capabilities: {
             'browserName': 'firefox',
         }, 
}

一旦服务器启动并且conf文件设置为这样,我就可以通过启动测试来运行firefox。我更喜欢在不同的终端窗口中启动测试,因此测试的输出不会在selenium服务器的输出中被淹没。到目前为止,这是我能够让firefox与(在撰写本文时)最新版本的FF和Protractor一起运行的唯一方法。

如果对此感兴趣的话,那对我来说是失败的

1)在过去,使用protracto的最简单方法是在我的protractor.conf中使用directConnect:true。这会导致您的脚本直接连接到系统上的浏览器特定驱动程序并开始运行测试。但是,使用上面提到的版本会引发我的错误:

I/direct - Using FirefoxDriver directly... [13:23:08] E/launcher - Unable to parse new session response: {"value": {"sessionId":"a3a72e32-fe2f-e84f-a09b-68793eee8464","capabilities":{"acceptInsecureCerts":true,"browserName":"firefox","browserVersion":"54.0","moz:accessibilityChecks":false,"moz:processID":49834,"moz:profile":"/var/folders/b5/5kptwjxj0xsgdzw2rfs4dwyncmp_vb/T/rust_mozprofile.QacVydBwozMK","pageLoadStrategy":"eager","platformName":"darwin","platformVersion":"15.6.0","rotatable":false,"specificationLevel":0,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000}}}}

当然这是我使用Mac而未在Windows机器上尝试过的,但是一旦我有机会就必须尝试。

2)尝试在protractor.conf文件中指定selenium独立Jar。  而不是根据文档在protractor.conf中使用seleniumAddress,你应该能够指定如下内容:

seleniumServerJar: '../node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.4.0.jar',

从我的理解,这应该启动一个selenium服务器和指定的webdriver应该连接到它但似乎服务器启动,但我的grunt驱动程序运行的测试似乎永远不会连接到服务器,它只是超时。