0

I'm learning Selenium with Django and Google Chrome. *I use Selenium 4.11.2.

Then, I tested with --headless, --headless=chrome and --headless=new as shown below, then all work properly:

from django.test import LiveServerTestCase
from selenium import webdriver

class TestBrowser(LiveServerTestCase):
    def test_example(self):
        options = webdriver.ChromeOptions()
        options.add_argument("--headless") # Here
        driver = webdriver.Chrome(options=options)
        driver.get(("%s%s" % (self.live_server_url, "/admin/")))
        assert "Log in | Django site admin" in driver.title
from django.test import LiveServerTestCase
from selenium import webdriver

class TestBrowser(LiveServerTestCase):
    def test_example(self):
        options = webdriver.ChromeOptions()
        options.add_argument("--headless=chrome") # Here
        driver = webdriver.Chrome(options=options)
        driver.get(("%s%s" % (self.live_server_url, "/admin/")))
        assert "Log in | Django site admin" in driver.title
from django.test import LiveServerTestCase
from selenium import webdriver

class TestBrowser(LiveServerTestCase):
    def test_example(self):
        options = webdriver.ChromeOptions()
        options.add_argument("--headless=new") # Here
        driver = webdriver.Chrome(options=options)
        driver.get(("%s%s" % (self.live_server_url, "/admin/")))
        assert "Log in | Django site admin" in driver.title

My questions:

  1. What is the difference between --headless, --headless=chrome and --headless=new?
  2. Which should I use, --headless, --headless=chrome or --headless=new?
Michael Mintz
  • 9,007
  • 6
  • 31
  • 48
Super Kai - Kazuya Ito
  • 22,221
  • 10
  • 124
  • 129

2 Answers2

0

The differences are explained here: https://stackoverflow.com/a/73840130/7058266

First came --headless. Then --headless=chrome was added in Chrome 96. Then the new one was renamed in Chrome 109 to --headless=new. The newer one makes headless Chrome work exactly like regular Chrome, but it's slightly slower than the old headless Chrome because it has the same backend code that regular Chrome has.

Usage:

options.add_argument("--headless=new")
Michael Mintz
  • 9,007
  • 6
  • 31
  • 48
0

--headless is the older argument and some of the new features are missing, e.g. I cannot download a file with Selenium.
--headless=new has more capabilities, currently I use this option so that I can test file downloads.

From https://www.selenium.dev/blog/2023/headless-is-going-away/:

The traditional --headless, and since version 96, Chrome has a new headless mode that allows users to get the full browser functionality (even run extensions). Between versions 96 to 108 it was --headless=chrome, after version 109 --headless=new.
Using --headless=new should bring a better experience when using headless with Selenium.

K. B.
  • 3,342
  • 3
  • 19
  • 32