How to run Jasmine tests in headless mode? - jasmine

I have to run Jasmine tests in headless mode and I could find PhantomJS Laucher but the project has been suspended PhantomJS
Is there any other way to run Jasmine tests in headless mode? If so, please point me to helpful docs, posts etc.

I found a nice post. You can use HeadlessChrome for the headless mode.
ng test --browsers ChromeHeadless
It is also possible to change the karma and protractor configuration to create a custom laucher or to change the capabilities for the chrome browser.

Protractor configuration you can make necessary changes
Run in it on Chrome Headless using below config
capabilities = {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--no-sandbox']
}
};
Run in on Firefox as headless using below config
capabilities: {
browserName: 'firefox',
firefoxOptions: {
args: ['--headless']
}
}

Related

Screenshots and videos are created despite the settings

I faced with problem of self created screenshots and videos after failed test runs despite of settings in cypress.json file
"video": false,
"screenshotOnRunFailure": false
Also tried to configure via Screenshot.defaults with no luck
Cypress.Screenshot.defaults({
screenshotOnRunFailure: false
})
Cypress version is used: "9.2.1"
Cypress run command like this:
"cy:run": "npx cypress run --browser chrome"
How to fix this issue?
Thank you

setRequestInterception support for Firefox in Puppeteer

Does setRequestInterception work for Firefox on Puppeteer?
In my tests, whenever launching with Firefox, I do get:
Protocol error (Fetch.enable): Fetch.enable RemoteAgentError#chrome://remote/content/Error.jsm:25:5
on await page.setRequestInterception(true);
I know that currently Firefox is in experimental mode for Puppeteer. So I expect this feature may not be supported.
Is there any other way that I could handle requests (like alter requests, mock responses) when running on Firefox?
This is how I launch the browser (I can see Firefox window, and all other tests pass):
browser = await puppeteer.launch({
product: "firefox",
headless: false,
slowMo: 50,
});
Puppeteer for Firefox does not support setRequestInterception yet.
You can keep a track of passing tests at https://puppeteer.github.io/ispuppeteerfirefoxready/
Here is how we launch firefox:
During installation, choose Puppeteer version ^3.0.0
PUPPETEER_PRODUCT=firefox npm install
Options:
puppeteerOptions: {
args: args,
//ignoreDefaultArgs: ['--enable-automation'],
headless: false,
//slowMo: 17,
//executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
executablePath: './node_modules/puppeteer/.local-firefox/mac-79.0a1/Firefox Nightly.app/Contents/MacOS/firefox'
},

Setting user agent on firefox with protractor and using seleniumAddress does not work

I want to set a specific user agent using protractor and Firefox. If I use directConnect on protractor.conf.js, it works:
//selenium-webdriver is installed via npm
var firefox = require('selenium-webdriver/firefox');
var firefoxProfile = new firefox.Profile();
firefoxProfile.setPreference("general.useragent.override", 'monitoring1152936086');
exports.config = {
directConnect: true,
capabilities: {
'browserName': 'firefox',
'firefox_profile': firefoxProfile
},
...
}
However, if I use seleniumAddress instead of directConnect it does not work. Test does work but the user agent is not used. I need to use a selenium server. For example:
var firefox = require('selenium-webdriver/firefox');
var firefoxProfile = new firefox.Profile();
firefoxProfile.setPreference("general.useragent.override", 'monitoring1152936086');
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'firefox',
'firefox_profile': firefoxProfile
},
...
}
As a side note, I cannot use chrome since I am trying to use Firefox as a workaround to the not so stable combination of protractor and selenium-docker with chrome (https://github.com/SeleniumHQ/docker-selenium/issues/87).
Any ideas? Thanks!
In the direct connect case Protractor creates the browser itself, so it's able to have total configuration over the browser. In the remote case Protractor has less control because it's connecting to the selenium server started up by webdriver-manager. The correct time to pass a firefox profile would be when webdriver-manager starts, but Protractor does not currently provide this feature.

with protractor how to setup internet explorer configuration?

I am using protractor 1.3.1 and running iedriverserver.exe 2.43.0.0 with IE11 installed (windows).
This is my spec:
describe('quick test IE driver', function () {
it('should go to ng homepage', function () {
browser.driver.get('https://angularjs.org/');
var title =element(by.css('h1')).getText();
expect(title).toBe('HTML enhanced for web apps!');
});
});
And this is my protractor.conf.js:
exports.config = {
// The address of a running selenium server.
//seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'internet explorer',
'platform': 'ANY',
'version': '11'
},
// Spec patterns are relative to the current working directly when
// protractor is called.
specs: ['main.spec.js'],
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
isVerbose:true,
includeStackTrace:true
}
};
getting this error though, any ideas for a solution:
UnknownError: The path to the driver executable must be set by the webdriver.ie.driver system property;
Update web manager for IE
First step is to update the ie webdriver using webdriver manager.Open command prompt and run the command given below
webdriver-manager update --ie
Go to npm location In this step move to the NPM_LOCATION(folder where npm is installed at your system. Move to the following path "NPM_LOCATION\node_modules\protractor\selenium" At this location check that IEDriverServer.exe is present or not.
Change for IE in conf.js
// conf.js exports.config = { seleniumAddress: 'http://localhost:4444/wd/hub', specs: ['specs.js'], capabilities: {
'browserName': 'internet explorer' // conf for internet explorer } }
// spec.js describe('Protractor Demo App', function() { it('should have a title', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
expect(browser.getTitle()).toEqual('Super Calculator'); }); });
Now run protractor conf.js
Note: Make sure you restart server by -->webdriver-manager start
taken from: http://protractorsupport.blogspot.com/2015/05/use-protractor-with-internet-explorer.html
According to the protractor config doc, the config value "seleniumArgs" is deprecated.
So, to have a single answer with all the info, here are the simplified steps:
Install Protactor globally:
npm install -g protractor
Run webdriver-manager update --ie to update the Selenium drivers that Protactor uses. Be aware if you are running the global webdriver-manager or the local webdriver-manager (i.e ./node_modules./bin/webdriver-manager update help); they will unzip the drivers at separate locations; only the local will unzip in [Project dir]
Take a look at the log of the previous command. It must show that the drivers were unzipped at a particular folder. Go to that folder and locate the IEDriverServer. In my case it was: "[Project dir]\node_modules\protractor\node_modules\webdriver-manager\selenium\IEDriverServer_x64_X.XX.X.exe. You will need to give the relative path to this file in the next step.
Inside your conf.js file, add the following keys & values. Note the use of localSeleniumStandaloneOpts, which means you should remove the property seleniumAddress if you have it:
multiCapabilities : [
{
'browserName' : 'chrome'
}, {
'browserName' : 'internet explorer'
}
],
localSeleniumStandaloneOpts : {
jvmArgs : ["-Dwebdriver.ie.driver=<RELATIVE PATH TO IE DRIVER>"] // e.g: "node_modules/protractor/node_modules/webdriver-manager/selenium/IEDriverServer_x64_X.XX.X.exe"
},
That was all I needed to do. I don't start the server beforehand, I simply run protactor conf.js. Easier now, I guess.
Download the IEDriverServer.exe
Please specify the same in your config file
seleniumArgs: ['-Dwebdriver.ie.driver=<path to IEDriverServer.exe>']
I was looking around this question for few hours, the best way seems to be:
1) download
webdriver-manager --ie update
This should download the driver from the google.. selenium ... release folder and place it directly in the good place in your npm local repository.
2) setup in config.js file of your tests:
...
multiCapabilities: [
//{
// browserName: 'chrome',
// version: 'ANY'
//},
//{
// browserName: 'firefox',
// version: 'ANY'
//},
{
browserName: 'internet explorer',
version: 'ANY'
},
],
// For some IE functions you may need to specify defaultTimeoutInterval
...
3) setup IE:
follow this post
http://jimevansmusic.blogspot.fr/2012/08/youre-doing-it-wrong-protected-mode-and.html
PS: about the "protected mode" setup of IE, it's important to have the same setup for all zones. I prefer to have protected mode 'on' for all zone
4) patch the registry
as described here: http://heliumhq.com/docs/internet_explorer
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BFCACHE]
"iexplore.exe"=dword:00000000
5) IE 11 update break the way the system work:
My lastest issue was "the server did not provide any stack trace ...." this is due to an update of the 17th of Dec 2014. Uninstall it and then it's good.
https://code.google.com/p/selenium/issues/detail?id=3390
crazy path to make it running. It cannot be like this for a long run, please comment my post with your experiences/feedbacks.
Richard
Here is my config file:
exports.config = {
seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
capabilities: {
'browserName': 'internet explorer',
},
framework: 'jasmine',
// Spec patterns are relative to the current working directory when
// protractor is called.
specs: ['your_spec_file.js'],
};
The steps to run in IE :
Need two terminals in Visual Studio Code,
In the first terminal, Run command "webdriver-manager start" to start selenium server.
In the second terminal, Run your js config file as :
Protractor conffile_name.js
This will successfully start Internet explorer.
Thanks

CLI testing with Jasmine / PhantomJS

Running yeoman server:test opens Jasmine in my browser and says that my test has passed. Now I want to try the same, but without a browser - using PhantomJS on the CLI. Unfortunately, running yeoman test only throws a:
Running "jasmine:all" (jasmine) task
Running specs for index.html
>> 0 assertions passed in 0 specs (0ms)
Why doesn't it find any tests, even though everything is included in my test/index.html and works pretty well using yeoman server:test?
I used yeoman init jasmine:app --force over my project and adjusted the Gruntfile.js as described here. It looks like that:
...
// headless testing through PhantomJS
jasmine: {
all: ["test/**/*.html"]
},
...
// Alias the `test` task to run the `jasmine` task instead
grunt.registerTask("test", "jasmine");
...
Note: My tests are written in CoffeeScript.
After some research I found out that PhantomJS is not able to find the files at the same location as ´yeoman server´ or yeoman server:test does.
I precised my question in another thread: Running tests in both headless and browser

Resources