When running end to end tests with Protractor, I'm seeing promises in my tests being resolved when run with Chrome. But when run with Phantom, the callbacks are never executed, and the test eventually times out with the message Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
My protractor.config.js file looks like:
exports.config = {
baseUrl: 'http://localhost:3000/',
suites: {
// ...
},
directConnect: !(process.env.NODE_ENV === 'CI'),
exclude: [],
multiCapabilities: [{
browserName: process.env.NODE_ENV === 'CI' ? 'phantomjs' : 'chrome',
'phantomjs.cli.args': ['--web-security=false',
'--ignore-ssl-errors=true'
]
}],
allScriptsTimeout: 110000,
getPageTimeout: 100000,
framework: 'jasmine2',
jasmineNodeOpts: {
isVerbose: false,
showColors: true,
includeStackTrace: false,
defaultTimeoutInterval: 400000,
print: function() {}
},
}
With this configuration, a test like the following will execute its callback for Chrome, but not for Phantom:
let targetUrl = '/foo';
it ('should resolve the route properly', function (done) {
browser.getCurrentUrl().then(function (url) {
console.log("****"); // This is printed in Chrome, but not Phantom
expect(url).toContain(targetUrl);
done();
})});
Node Modules Versions
Protractor: 5.0.0
Phantom: 4.0.0
PhantomJS 2.1.7
PhantomJS-prebuilt: 2.1.14
Webdriver Manager (inside Protractor): 11.1.1
Any ideas?
Related
For end-to-end testing in Angular, I would like to try out Protractor with Jest for Angular 8. In the configuration file protractor.conf.js, spec reporter of Jasmine is defined by default:
const { SpecReporter } = require('jasmine-spec-reporter');
/**
* #type { import("protractor").Config }
*/
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
browserName: 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.json')
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
My question is, how can I configure similarly like this, but for Jest?
We have a big set of automated tests using Protractor/Jasmine which work like a dream on Azure Pipelines. However, so far we've only used Chrome as the browser.
Now i have to run the same tests using Internet Explorer (11) but am getting no joy at all!!
Here's a part of my conf.js file that deals with the browser:
var HtmlReporter = require('protractor-beautiful-reporter');
var {SpecReporter} = require("jasmine-spec-reporter");
var jasmineReporters = require("jasmine-reporters");
exports.config = {
//seleniumAddress: `http://localhost:4444/wd/hub`,
framework: "jasmine2",
specs: ['specs/secureTrading/01_SecureTrading.js',
'specs/secureTrading/02_ST_Payments.js'
],
getPageTimeout: 40000,
allScriptsTimeout: 60000,
capabilities: {
'browserName': 'internet explorer',
'ignoreProtectedModeSettings': true,
'platform': 'ANY',
'version': '11',
args: ['--silent', '--no-sandbox', '--test-type=browser', '--lang=US', '--start-maximized'], //,'--headless', '--disable-gpu'
prefs: {
'download': {
'prompt_for_download': false,
'directory_upgrade': true,
'extensions_to_open': '',
'default_directory': process.cwd() + '/downloads/'
},
}
},
localSeleniumStandaloneOpts: {
jvmArgs: [
'-Dwebdriver.ie.driver=node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer3.14.0.exe'
]
},
directConnect: false,
seleniumArgs: ['-Dwebdriver.ie.driver=node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer3.14.0.exe'],
ignoreUncaughtExceptions: true,
onPrepare: function() {
Having looked at other postings, I've tried removing // from seleniumAddress:http://localhost:4444/wd/hub,` still errors, Changing DirectConnect makes no difference.
With the settings as above, this is the error message.
Any advice please?
Thanks
Additional Logs as per comment below.
Local:
My karma file looks like the following, I have around 900 test cases & some of them fail due to default timeout being set to 5000ms. I tried adding the following but it did not make a difference (same error, karma thinks the default value is still 5000ms):
jasmineNodeOpts: {
defaultTimeoutInterval: 50000
}
How can I fix this issue?
Karma file:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['parallel', 'jasmine', '#angular-devkit/build-angular'],
plugins: [
require('karma-parallel'),
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('#angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, 'coverage'), reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: true,
browserNoActivityTimeout: 60000,
parallelOptions: {
executors: Math.min(Math.ceil(require('os').cpus().length / 2), 6)
}
});
};
Since karma-jasmine version 2.0 you can now pass timeoutInverval directly in the config:
module.exports = function(config) {
config.set({
client: {
jasmine: {
timeoutInterval: 50000
}
}
})
}
I am running my protractor tests on browserstack and noticed that the tests I run are marked as separate entries. I want to group them all into a single build.
I have added build capability to my protractor config file. But it doesn't seem to help.
Attaching my protractor configuration field. Appreciate your help.
Thanks
exports.config = {
specs: [
'./src/**/*.e2e-spec.ts'
],
browserstackUser: xx,
browserstackKey: xxx,
multiCapabilities: [{
browserName: 'chrome',
os: 'Windows',
os_version: '10',
'browswestack.debug': true,
project: 'protractor'
}, {
os: 'OS X',
os_version: 'High Sierra',
browserName: 'Safari',
'browswestack.debug': true,
project: 'protractor'
}],
build_number: 'local',
maxInstances: 2,
SELENIUM_PROMISE_MANAGER: false,
directConnect: false,
connectionRetryCount: 3,
connectionRetryTimeout: 90000,
baseUrl: 'http://localhost:4200',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: _.noop
},
onPrepare: () => {
tsNode.register({
project: path.join(__dirname, './tsconfig.e2e.json')
});
let reporter = new SpecReporter();
jasmine.getEnv().addReporter(reporter);
}
};
EDIT : I fixed the problem. I was using build_number instead of build.
However , when I run the tests I noticed that the tests are getting appended. For instance if I run 5 tests , I could only see the last test as executed in browserstack. How should I fix this ?
Open a session on Automate Dashboard and under 'Input Capabilities', check if 'build' is visible.
I'm trying to run automated tests using Protractor on WebStorm on Chrome and Firefox.
I've set up the environment and everything looks fine unless I'm trying to run it on both Chrome and Firefox. Works perfectly fine on Chrome itself but not on both.
This is my config.js:
exports.config = {
onPrepare: function() {
browser.manage().window().setSize(1600, 1000);
},
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['**/*.spec.*'],
multiCapabilities: [
{
browserName: 'firefox'
},
{
browserName: 'chrome'
}]
};
This is the error I see in the console:
[15:07:02] I/launcher - Running 2 instances of WebDriver