Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support chrome headless and change defaults for cypress run #832

Open
brian-mann opened this issue Oct 26, 2017 · 23 comments

Comments

@brian-mann
Copy link
Member

commented Oct 26, 2017

Change 1.

With Chrome 63 coming out we can make some big changes at Cypress.

  1. We will be able to support the debugger protocol which will enable native events
  2. We will be able to support chrome --headless

The reason we currently do not support chrome --headless is because Chrome does not support extensions in that mode. We use an extension to automate the browser and that's why its a no-go. By switching from the extension to the debugger protocol, we'll be able to get around this.

Change 2.

Once we support chrome headless I propose the following changes to the CLI:

cypress run

Currently cypress run will launch Electron headlessly. This is confusing for users because they can't see what's going on and because they don't read our docs they don't understand that we're launching Electron instead of Chrome. Due to the browser version differences, they see failures in Electron that aren't happening in Chrome.

What I propose is to change this behavior so that cypress run by default will search for Chrome and launch it in headed mode. When no Chrome is installed, it'll fall back to Electron.

Currently we support a --headed option that only applies to Electron. This was done to prevent breaking changes.

This should now switch to being the default but then enabling the user to explicitly opt into the --headless mode for both Electron + Chrome.

This will be a breaking change and could come out in Cypress 2.x.x.

@tnhu

This comment has been minimized.

Copy link

commented Nov 7, 2017

This is important. Today I found a couple of our tests failing in CI environments but not locally using cypress app. It turns out Chrome and Electron act differently.

Is there anyway you can prioritize this feature? 2.x.x seems like too far away.

@brian-mann

This comment has been minimized.

Copy link
Member Author

commented Nov 7, 2017

Chrome and Electron act the same - the difference is the underlying version of Chromium each is using.

Electron uses Chromium 53. Your local version of Chrome likely differs. These different versions will not act exactly the same.

I can't say when this will be prioritized because all of our team members are currently working on other features. We are open source now and are accepting PR's of course. It's going to be a lot of work - likely weeks for someone to work on full time.

As for the 2.x.x - its not that far off because we use semver. Whenever we have the next breaking change we will reach 2.x.x - it could be the next release for that matter!

@brian-mann

This comment has been minimized.

Copy link
Member Author

commented Nov 7, 2017

What I would suggest is install chrome in CI and make it match the version you're running locally. We have several docker containers with this prebuilt.

Alternatively you could also run Electron locally to suss out the differences in failing tests. Plenty of users do either.

@nrutman

This comment has been minimized.

Copy link

commented Feb 1, 2018

@brian-mann, has there been any consideration to either:

  1. Expose arguments to pass to chrome to run it in headless mode?
  2. Semi-regularly update the version of Chromium used in the Electron browser? It looks like it's currently 10 versions behind.

Those might be lower-hanging (?) fruit that might help close the gap.

@brian-mann

This comment has been minimized.

Copy link
Member Author

commented Feb 1, 2018

@nrutman there is already an API for doing your first bullet item: https://docs.cypress.io/api/plugins/browser-launch-api.html

The problem is that running in headless mode disables chrome extensions which prevents Cypress from working. However you can modify other arguments.

Yes, per your second bullet item we have been waiting for Electron to drop 1.8 which bumps node to 8.x.x. They are currently in beta with semi regular releases.

https://electronjs.org/releases#1.8.2-beta.4

@Graham42

This comment has been minimized.

Copy link
Contributor

commented Feb 1, 2018

Looks like should be able to load extensions for headless chrome with flags

--disable-extensions-except=/path/to/extension/
--load-extension=/path/to/extension/

Source: GoogleChrome/puppeteer#659 (comment)

@brian-mann

This comment has been minimized.

Copy link
Member Author

commented Feb 1, 2018

I had read somewhere about chrome headless not ever going to support extensions. I don't believe there are any configuration options that will change this. Puppeteer here is irrelevant since this is a restriction from Chrome itself.

@rsudarson

This comment was marked as off-topic.

Copy link

commented Mar 30, 2018

@brian-mann When this change will be rolledout

@kelegorm

This comment has been minimized.

Copy link

commented Sep 27, 2018

Why cypress need chrome extension? Why using headless mode is valuable?

@mark-panjiva

This comment has been minimized.

Copy link

commented Nov 28, 2018

Should still be able to switch from using xvfb and chrome -> chome --headless

@dauledk

This comment has been minimized.

Copy link

commented Nov 30, 2018

@kelegorm Headless chrome would be awesome, since it's the option default available at Heroku. To quote from their webpage:

Google Chrome recently added support for a --headless command line option, which means you no longer need a window server to run browser tests. This configuration is optimal for UAT as it uses your browser, but doesn’t waste cycles rendering content to the screen. As such, this is our prescribed browser solution.

They have depreciated support for Xvfb Chrome buildpack on their new buildpacks, such as heroku-16.

So you might say, why care about Heroku? The best argument I can find is that while Cypress makes it easy to do end2end testing, Heroku aims to make hosting simple. A perfect match ❤️

@weyert

This comment has been minimized.

Copy link

commented Dec 6, 2018

Yes, this would be fantastic to have Cypress working with Heroku. This currently stops me from using Cypress

@jfbrennan

This comment has been minimized.

Copy link

commented Jan 23, 2019

Is Chrome headless support happening? If so, is there an approx. date of availability?

@arshdeeptinna

This comment has been minimized.

Copy link

commented Mar 11, 2019

Any update on this? We heavily use cypress and heroku but cypress needs cedar-14 which will go away in april 2019.

@bahmutov

This comment has been minimized.

Copy link
Collaborator

commented Mar 11, 2019

Cypress team update

We have investigated headless Chrome support. To support executing commands and capture the video of the test run, we must go through the Debugger protocol. Thus we will support headless Chrome after landing native events #311 which is in progress.

@marinav

This comment has been minimized.

Copy link

commented Mar 27, 2019

Hi,

Thank you for your work !! I just started to use Cypress and it's really great !

Unfortunatly I'm using heroku and cedar-14 is no more supported so I'm waiting for headless Chrome support...

Capture d’écran 2019-03-18 à 14 56 16

I saw above that you are working on it, but do you know when it will be available ? Is it in days, weeks, month ? I'm stuck waiting for this feature it's too bad 😢

@jrnail23

This comment has been minimized.

Copy link

commented Jun 7, 2019

Just a suggestion here... why not split this to separate "Support chrome headless" and "change defaults for cypress run" into separate issues?
Changing defaults introduces a breaking change, whereas "Support chrome headless" (presumably) should be able to be delivered without breaking changes.

I'm all for anything that gets headless chrome support delivered quicker, as I'm having a bit of trouble dealing with some electron limitations.

@jamie-pate

This comment has been minimized.

Copy link

commented Jun 12, 2019

I had read somewhere about chrome headless not ever going to support extensions. I don't believe there are any configuration options that will change this. Puppeteer here is irrelevant since this is a restriction from Chrome itself.

Relevant link:
https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c5
Please star this issue as a 'vote' for them to reopen and implement it :)

@waitsangbv

This comment has been minimized.

Copy link

commented Aug 1, 2019

"cypress run --browser chrome" works fine but fire up a browser,
"cypress run --browser chrome --headless" doe not work as --headless is not a supported option

@vansh93

This comment has been minimized.

Copy link

commented Aug 19, 2019

Cypress team update

We have investigated headless Chrome support. To support executing commands and capture the video of the test run, we must go through the Debugger protocol. Thus we will support headless Chrome after landing native events #311 which is in progress.

Hi , I am still not able to run cypress in headless mode . Am using Cypress "3.4.1" and the command i used are "cypress run" and "cypress run -b chrome --headless". Can u pls tell the workaround?

@lulubobst

This comment has been minimized.

Copy link

commented Aug 19, 2019

What is going on with this one, seems like we were going to do it but that was 2yrs ago?

@vambasta

This comment has been minimized.

Copy link

commented Aug 20, 2019

Cypress team update

We have investigated headless Chrome support. To support executing commands and capture the video of the test run, we must go through the Debugger protocol. Thus we will support headless Chrome after landing native events #311 which is in progress.

Hi , I am still not able to run cypress in headless mode . Am using Cypress "3.4.1" and the command i used are "cypress run" and "cypress run -b chrome --headless". Can u pls tell the workaround?

@brian-mann .. Can u pls get any update on it . cos i am stuck with it

@Swati-activeops

This comment has been minimized.

Copy link

commented Aug 21, 2019

Could you please help me with any updates on this ?@brian-mann

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.