I'm facing a problem from one of my tests when executing them. I'm testing a non-angular site written on aurelia. I've set some configurations regarding the timeouts and to ignore synchronization. Still I'm facing the timeout problem - the stack trace is added at the end of the post. Here is my setup:
Protractor: 4.0.9
protractor.conf.js:
exports.config = {
directConnect: true,
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'
},
//seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['test/e2e/dist/**/*.js'],
plugins: [{
package: 'aurelia-tools/plugins/protractor'
}],
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
},
framework: "jasmine2",
onPrepare: function(){ //configure junit xml report
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
filePrefix: 'e2e-results',
savePath: 'test/reports'
}));
}
};
Here is my conf.js for my specific tests:
exports.config = {
directConnect: true,
capabilities: {
'browserName': 'chrome'
},
restartBrowserBetweenTests: true,
//The address of a running selenium server.
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 180000
},
//Here we specify the name of the specs files.
specs: ['test/e2e/dist/**/*.js'],
getPageTimeout: 120000,
allScriptsTimeout: 120000,
onPrepare: function() {
browser.ignoreSynchronization = true;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 180000;
by.addLocator('valueBind', function (bindingModel, opt_parentElement) {
var using = opt_parentElement || document;
var matches = using.querySelectorAll('*[value\\.bind="' + bindingModel +'"]');
var result = undefined;
if (matches.length === 0) {
result = null;
} else if (matches.length === 1) {
result = matches[0];
} else {
result = matches;
}
return result;
});
}
}
And here is the beforeEach part of my test specification:
beforeEach(function(){
browser.driver.get(URL);
browser.driver.manage().window().maximize();
browser.ignoreSynchronization = true;
browser.driver.executeAsyncScript(
'var cb = arguments[arguments.length - 1];' +
'document.addEventListener("aurelia-composed", function (e) {' +
' cb("Aurelia App composed")' +
'}, false);'
).then(function(result){
console.log(result);
});
});
Stack trace
<![CDATA[ScriptTimeoutError: asynchronous script timeout: result was not received in 11 seconds
(Session info: chrome=53.0.2785.143)
(Driver info: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),platform=Windows NT 6.3.9600 x86_64)
at WebDriverError (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:26:26)
at ScriptTimeoutError (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:291:26)
at Object.checkLegacyResponse (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:639:15)
at parseHttpResponse (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:538:13)
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:472:11
at ManagedPromise.invokeCallback_ (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1379:14)
at TaskQueue.execute_ (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2913:14)
at TaskQueue.executeNext_ (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2896:21)
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2820:25
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:639:7
From: Task: WebDriver.executeScript()
at Driver.schedule (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:377:17)
at Driver.executeAsyncScript (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:614:17)
at Object.<anonymous> (C:\Users\USER\Documents\Git\src\Project\test\e2e\dist\testspec.js:33:18)
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:94:23
at new ManagedPromise (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1082:7)
at controlFlowExecute (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:80:18)
at TaskQueue.execute_ (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2913:14)
at TaskQueue.executeNext_ (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2896:21)
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2820:25
at C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:639:7
From: Task: Run beforeEach in control flow
at Object.<anonymous> (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:79:14)
at attemptAsync (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1980:24)
at QueueRunner.run (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1935:9)
at QueueRunner.execute (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1923:10)
at Spec.Env.queueRunnerFactory (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:714:35)
at Spec.execute (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:371:10)
at Object.fn (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:2579:37)
at attemptAsync (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1980:24)
at QueueRunner.run (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1935:9)
at QueueRunner.execute (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:1923:10)
From asynchronous test:
Error
at Suite.<anonymous> (C:\Users\USER\Documents\Git\src\Project\test\e2e\dist\testspec.js:22:2)
at addSpecsToSuite (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:867:25)
at Env.describe (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:836:7)
at jasmineInterface.describe (C:\Users\USER\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine-core\lib\jasmine-core\jasmine.js:3576:18)
at Object.<anonymous> (C:\Users\USER\Documents\Git\src\Project\test\e2e\dist\testspec.js:15:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)]]>
Any help would be appreciated, thank you.
I have found a soultion a little while ago but I forgot to post the answer. So here it is.
There is a Protractor plugin made by Aurelia. As I mentioned in my question the application which I'm automating is written via the Aurelia framework. So as I stared using this plugin and especially the loadAndWaitForAureliaPage method for loading pages everything started to work correctly.