Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a good headless browser to run with protractor?

New User here.

After hours of building my smoke and regression tests, I found out after reading many cases online that phantomjs is known to be a trouble to run with protractor. Jenkins has been running phantomjs for all the tasks it has been given so far.

They need these tests to run as part of ci which does not have a windowing system installed.

So I would appreciate it if there is a recommendation for completely headless browser or a headless chrome(that would be most beneficial) and a step by step to set it up. I already have a conf.js and a e2e.conf.js file. My code works perfectly fine with chrome.

I am on a iMac and selenium webdriver, I believe.

Edit: Problem = protractor doesn't work with phantomjs. What I have done = use different web elements and googled if anyone has faced a similar situation. Also googled for headless browsers that worked for protractor, unable to find a suitable solution.

like image 948
tosh Avatar asked Mar 25 '15 20:03

tosh


2 Answers

If anyone reached here - the answers are outdated. Chromium (on next release) now supports headless mode. no need to work hard.

You can read more here:

https://developers.google.com/web/updates/2017/04/headless-chrome

Here is an example from command line

chrome \
 --headless \                   # Runs Chrome in headless mode.
 --disable-gpu \                # Temporarily needed for now.
 --remote-debugging-port=9222 \
 https://www.chromestatus.com   # URL to open. Defaults to about:blank.

And you can simply trigger protractor with capabilities for chrome:

Activating chrome language flags when activating from protractor (selenium)

Here is the configuraiton I am using

 capabilities: {
    'browserName': browserName,
    chromeOptions: {
      binary: '/Users/guymograbi/Downloads/chrome-mac/Chromium.app/Contents/MacOS/Chromium',
      args: ['--headless','--disable-gpu']
    }
  },

Update - new versions of chrome doesn't require binary property

In my environments I found I can remove the binary property as new version of chrome is available on stable branches

My protractor configuration is

capabilities: {
    'browserName': 'chrome',
    chromeOptions: {
      args: [ '--headless', '--disable-gpu', '--no-sandbox', '--window-size=1920x1200' ]
    },

  },

And it works smoothly for weeks now. highly recommended.

Update - how to do this in karma is super easy

Using headless chrome in karma is super easy:

 browsers: 'ChromeHeadless'

it should work with the chrome loader and everything. more info

like image 167
guy mograbi Avatar answered Sep 30 '22 05:09

guy mograbi


Your best bet is to continue with Chrome. With a bit of work you can get it to work via a CI and in a headless manner - we do this using Jenkins and Docker Ubuntu servers which are headless.

You will need to configure Chrome to run headless using XVFB. You can start off by following the gist here https://gist.github.com/addyosmani/5336747

You state you are on a Mac so you can either run the headless tests via Docker on your machine or you could set up a second config for the CI tests.

Another resource http://tobyho.com/2015/01/09/headless-browser-testing-xvfb/

like image 34
Asta Avatar answered Sep 30 '22 05:09

Asta