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 #832

Closed
brian-mann opened this issue Oct 26, 2017 · 44 comments · Fixed by #5676
Closed

Support chrome --headless #832

brian-mann opened this issue Oct 26, 2017 · 44 comments · Fixed by #5676
Assignees
Labels
browser: chrome CI General issues involving running in a CI provider cli

Comments

@brian-mann
Copy link
Member

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
Copy link

tnhu 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
Copy link
Member Author

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
Copy link
Member Author

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
Copy link

nrutman 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
Copy link
Member Author

@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
Copy link
Contributor

Graham42 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: puppeteer/puppeteer#659 (comment)

@brian-mann
Copy link
Member Author

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 has been minimized.

@kelegorm
Copy link

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

@mark-panjiva
Copy link

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

@alexbjorlig
Copy link

@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
Copy link

weyert commented Dec 6, 2018

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

@jfbrennan
Copy link

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

@arshdeeptinna
Copy link

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

@bahmutov
Copy link
Contributor

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
Copy link

marinav 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
Copy link

jrnail23 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
Copy link

jamie-pate 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 :)

@flotwig flotwig self-assigned this Nov 13, 2019
@flotwig flotwig changed the title Support chrome --headless, remove xvfb, and change defaults for cypress run Support chrome --headless and make it the default for cypress run Nov 15, 2019
@cypress-bot cypress-bot bot added stage: work in progress stage: needs review The PR code is done & tested, needs review and removed stage: needs review The PR code is done & tested, needs review stage: work in progress labels Dec 11, 2019
@flotwig flotwig changed the title Support chrome --headless and make it the default for cypress run Support chrome --headless Dec 12, 2019
@cypress-bot cypress-bot bot added stage: pending release and removed stage: needs review The PR code is done & tested, needs review labels Dec 12, 2019
@cypress-bot
Copy link
Contributor

cypress-bot bot commented Dec 12, 2019

The code for this is done in cypress-io/cypress#5676, but has yet to be released.
We'll update this issue and reference the changelog when it's released.

@cypress-bot
Copy link
Contributor

cypress-bot bot commented Dec 12, 2019

Released in 3.8.0.

@mightyiam
Copy link

Thank you!

@Waterstraal
Copy link

Does not work for me. Cypress opens a visible maximized (it does not adhere viewportWidth and viewportHeight settings) my chrome instance when running cypress run --headless --browser chrome.

Interestingly, it does report to be running chrome 78 headless:
image

Cypress: 3.8.0
OS: Microsoft Windows 10 Enterprise Version 10.0.16299 Build 16299

@mightyiam
Copy link

@Waterstraal I feel you better open a new issue for that.

@jennifer-shehane
Copy link
Member

New issue for --headless not opening Chrome in headless mode here: #5949

@Saibamen
Copy link
Contributor

#5949 fixed

@cypress-io cypress-io locked and limited conversation to collaborators Jan 13, 2020
@jennifer-shehane jennifer-shehane added CI General issues involving running in a CI provider and removed CI: heroku labels Oct 5, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
browser: chrome CI General issues involving running in a CI provider cli
Projects
None yet
Development

Successfully merging a pull request may close this issue.