Angularjs 带幻影的量角器永远挂着

Angularjs 带幻影的量角器永远挂着,angularjs,windows,node.js,phantomjs,protractor,Angularjs,Windows,Node.js,Phantomjs,Protractor,这是我的conf文件: exports.config = { seleniumServerJar: './selenium-server-standalone-2.43.1.jar', "capabilities": { "browserName": "phantomjs" }, specs: [ "test.js" ], jasmineNodeOpts: { isVerbose: false,

这是我的conf文件:

exports.config = { 
   seleniumServerJar: './selenium-server-standalone-2.43.1.jar', 
  "capabilities": { 
    "browserName": "phantomjs"   
 }, 
 specs: [ 
        "test.js" 
    ], 
    jasmineNodeOpts: { 
        isVerbose: false, 
        showColors: true, 
        includeStackTrace: true 
    }, 
};
这是一个名为test.js的网站。它是针对
ng europe
社区网站的,所以所有希望运行它的人都可以运行它。我选择它来学习量角器,因为它是用angular编写的:

describe('test ng-europe', function() { 

        beforeEach(function() { 
                browser.get('http://ngeurope.org'); 
        }); 

         it('should have a title', function() { 
                expect(browser.getTitle()).toContain('ng-europe'); 
                element.all(by.repeater('avatar in talk.avatars')).count().then(function(count) { 
                        console.log(count); 
                }); 
        }); 

        it('search something', function() { 
                var search_=element(by.model('speakerq')); 
                var speakers_=element.all(by.repeater('speaker in config.speakers').column('name')); 
                var speakers = $$('div.speaker.col-xs-12.col-sm-4.text-center.ng-scope img.img-responsive.img-thumbnail.img-circle.avatar');
                search_.sendKeys('igor'); 
                expect(speakers.count()).toBe(1); 
                console.log("speakers count" + speakers.count()); 
        }); 

        it('search something else', function() { 
                var search_=element(by.model('talksq')); 
                var talkers = $$('ul.list-unstyled li.ng-scope.ng-binding span.speakers-names.ng-binding'); 
                search_.sendKeys('with'); 
                expect(talkers.count()).toBe(8); 
                console.log("talkers count" + talkers.count()); 
        }); 

        it('click on jobs', function() { 
                var jobs_button=element(by.linkText('Jobs')); 
                jobs_button.click(); 
                var sponsors=$$('div.col-md-4 img.sponsor-logo.gold-sponsor') 
                expect(sponsors.count()).toBe(4);        
        }); 
});
我这样称呼它:

>protractor conf.js
selenium驱动程序在同一个目录节点中,%appdata%\npm在路径中,安装并更新了phantomjs。如果我将驱动程序设置为chromefirefox,一切都会正常运行,但是使用phantomjs脚本将永远挂起,不会发生任何事情。没有显示错误,没什么,只是这个:

Starting selenium standalone server... 
[launcher] Running 1 instances of WebDriver 
Selenium standalone server started at http://XX.XX.XXX.XX:60324/wd/hub

我遗漏了什么?

我已经设法,至少,让它运行测试使用:

  • phantomjs
    1.9.7
  • 量角器
    2.0.0
但是,现在它在成功通过第一个
it()
block之后立即抛出以下错误消息:

错误:失败:与远程浏览器通信时出错。它可能已经死了

下面是我使用过的配置(应用了几个phantomjs助手的“技巧”):

有很多人在问如何处理这样的错误:

有不同的解决办法建议,但没有一个适合我和其他人

这就引出了答案的要点:首先为什么是幻影?

如以下人士所述:

我们建议不要在带有量角器的测试中使用PhantomJS。那里 有很多关于PhantomJS崩溃和行为的报道吗 与真正的浏览器不同

延伸这一点

如果使用
量角器的主要目的是进行端到端测试,那么您肯定应该重新考虑您的浏览器选择。端到端测试应该模拟应用程序的真实用户,我很确定,他们不会使用
phantomjs
浏览您的站点


如果选择
phantomjs
的原因是缺少真实的显示器,那么您可以在
xvfb
(请参阅更多)的帮助下使用虚拟显示器,或者在远程selenium服务器上运行测试,无论是您自己的还是由或提供的。

感谢您给出的详尽答案!我仍然无法运行这个,但无论如何都会接受答案(唯一的区别是我的幻影是
v1.98
)。酱汁实验室看起来很有希望:-)
exports.config = {
    seleniumArgs: ['-browserTimeout=60'],

    "capabilities": {
        "browserName": "phantomjs",
        'phantomjs.cli.args': [
            '--ignore-ssl-errors=true',  
            '--web-security=false'
        ]
    },

    specs: [
        "test.js"
    ],

    framework: "jasmine2",

    allScriptsTimeout: 20000,

    onPrepare: function () {
        browser.driver.manage().window().maximize();
    },

    jasmineNodeOpts: {
        showColors: true,
        isVerbose: true,
        includeStackTrace: true,

        defaultTimeoutInterval: 25000
    }
};