问题
I'm trying to set up End-2-End testing for my Angular (1.4) site using protractor (2.1.0). Jasmine is installed and unit tests are working fine. When I run protractor the index#/login page loads in a browser window but no code runs and protractor reports this error
Failed: Angular could not be found on the page http://localhost/SpectrumGMWeb/index.html#/login : retries looking for angular exceeded
My protractor config looks like this
exports.config = {
allScriptsTimeout: 11000,
seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
specs: [
'*.js'
],
rootElement:'html',
capabilities: {
'browserName': 'chrome'
},
baseUrl: 'http://localhost/SpectrumGMWeb/',
framework: 'jasmine2',
jasmineNodeOpts: {
defaultTimeoutInterval: 30000
},
};
My test file is very simple
describe('my app', function() {
describe('login', function() {
beforeEach(function() {
browser.get('index.html#/login');
});
it('should render login page when user navigates to login page', function() {
expect(true).toBe(true);
});
});
});
ng-app="main" is set on the html element of index.html. The website does work.
Any ideas?
回答1:
Try putting a browser.ignoreSynchronization = true;
before you do a browser.get()
in your login function.
回答2:
Well thanks everyone for your input. I did finally fix this problem by copying all the index.html file contents to a new file. It seems that somehow the file was corrupted in a way that protractor did not like. I know it sounds simple but I wasted 2 full days on this so hope it helps someone.
回答3:
If you need to navigate to a page which does not use Angular then Add this line of code before browser.get() line there:
browser.waitForAngularEnabled(false);
Reference : https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular-on-page-load
回答4:
Are you sure you've launched your server at http://localhost/SpectrumGMWeb/
?
Protractor is feeding this URL to Selenium and trying to access your application at this address. If it is not running at this address Protractor will get no response from it and will give you the error you are getting.
If you need advice on how to get a local server up and running to serve your project, I recommend grunt-connect, for example like this (which will launch a server at http://localhost:9001
)
module.exports = function(grunt) {
grunt.initConfig({
connect: {
server: {
options: {
port: 9001,
base: '', // root folder of your app files
keepalive: true
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.registerTask('default', ['connect:server'])
}
回答5:
I received this error as well, and I fixed it by changing my package.json "scripts" variable from:
"scripts": {
...
"pree2e": "webdriver-manager update --standalone false --gecko false",
"e2e": "protractor"
}
to
"scripts": {
...
// REMOVE "pree2e"
"e2e": "ng e2e"
}
来源:https://stackoverflow.com/questions/31752301/protractor-error-angular-could-not-be-found-on-the-page