64

I use Selenium RC for testing. Now to perform a load test, I want to run parallel test cases. Is there any way to run them without opening a browser?

Stéphane Bruckert
  • 21,706
  • 14
  • 92
  • 130
Mohyt
  • 990
  • 2
  • 10
  • 26
  • possible duplicate of [Is it possible to hide the browser in Selenium RC?](http://stackoverflow.com/questions/1418082/is-it-possible-to-hide-the-browser-in-selenium-rc) – Salvador Dali Nov 20 '13 at 02:57

10 Answers10

125

Chrome now has a headless mode:

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)
Stéphane Bruckert
  • 21,706
  • 14
  • 92
  • 130
  • 11
    this should be the answer – O.rka Jul 26 '16 at 22:44
  • 1
    Simplest answers are usually the best! Thank you. – hod Nov 10 '17 at 02:52
  • 2
    UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ' – Tiffany F. Aug 22 '18 at 13:17
  • how can i use this if I additionally want to copy something to clipboard and then paste it? I tried it but it only works when the browser opens – basilisk Jun 04 '20 at 15:32
13

Since PhantomJS has been deprecated, using headless versions of Firefox would be a viable option.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get('https://www.google.com/')
Hunter
  • 3,080
  • 20
  • 23
  • this work in my macbook. I wonder why it would discretely open a firefox icon (looks like an idle icon) on the right side of my Dock, but yes you can't see what is happening. So I guess, it is operating headless indeed. – toking May 04 '23 at 12:37
10

Try this code:

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)
coder
  • 700
  • 8
  • 12
8

To set up on Centos (do all installation as root)

Install pip Download https://bootstrap.pypa.io/get-pip.py

python get-pip.py

Installing selenium If you have pip on your system, you can simply install or upgrade the Python bindings: pip install -U selenium

Alternately, you can download the source distribution from PyPI (e.g. selenium-2.53.1.tar.gz), unarchive it, and run:

python setup.py install

install the program: pyvirtualdisplay

pip install pyvirtualdisplay

yum install Xvfb libXfont Xorg

Then modify your script to add the bold lines within ** and **

**from pyvirtualdisplay import Display**
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

class SeleniumDemo(unittest.TestCase):

    def setUp(self):
        **self.display = Display(visible=0, size=(800, 600))
        self.display.start()**
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.soastastore.com/"
        self.verificationErrors = []
        self.accept_next_alert = True


    def tearDown(self):`enter code here`
        self.driver.quit()
        ***self.display.stop()***
        self.assertEqual([], self.verificationErrors)
Nic Wanavit
  • 2,363
  • 5
  • 19
  • 31
Derek Lu
  • 106
  • 1
  • 1
7

You can run Selenium headless, take a look at this question/answer: Is it possible to hide the browser in Selenium RC?

Especially for performance load tests, you should have a look at Apache JMeter.

Community
  • 1
  • 1
Dag
  • 10,079
  • 8
  • 51
  • 74
  • I already tried Apache JMeter for load testing Of GWT apps. But it not quite successful. – Mohyt Sep 29 '11 at 12:16
3

Always follow the Documentation. Here is what selenium doc says. It provide a standalone jar.

  • Download the standalone jar. And run it with command

    java -jar selenium-server-standalone.jar
    
  • Now you will see a stanalone server started.

  • Now set up your webdriver like below and rest part will be as it is.

    driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities={'browserName': 'htmlunit', 'version': '2', 'javascriptEnabled': True})
    
  • Summary code will be like.

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.common.keys import Keys
    driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', 
    desired_capabilities={'browserName': 'htmlunit', 'version': '2', 
    'javascriptEnabled': True})
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    elem = driver.find_element_by_name("q")
    elem.clear()
    elem.send_keys("pycon")
    elem.send_keys(Keys.RETURN)
    assert "No results found." not in driver.page_source
    driver.close()
    
Pang
  • 9,564
  • 146
  • 81
  • 122
Vikash Singh
  • 884
  • 8
  • 11
2

It is possible, but not with the standard firefox driver / chrome / etc.

You would need to install PhantomJS. Just assign your WebDriver to an instance of phantomJS driver:

driver = webdriver.PhantomJS()

If you run your code now, no browser window will be opened.

Bhargav Rao
  • 50,140
  • 28
  • 121
  • 140
  • the PhantomJS development is now suspended as per @Hunter and yes I can confirm. https://phantomjs.org/ – toking May 04 '23 at 12:40
1

You can import Options if you don't want to open a web browser.

from selenium import webdriver   # for webdriver
from selenium.webdriver.support.ui import WebDriverWait  # for implicit and explict waits
from selenium.webdriver.chrome.options import Options  # for suppressing the browser

Then in the code:

option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(options=option)

And continue with the rest of the program.

Plabon Dutta
  • 6,819
  • 3
  • 29
  • 33
0

requirements:

sudo apt-get install xvfb
pip install selenium
pip install PyVirtualDisplay

download chrome driver binary from below link and paste into drivers directory: https://sites.google.com/a/chromium.org/chromedriver/downloads

code:

from selenium import webdriver
from pyvirtualdisplay import Display

with Display(visible=False, size=(800, 600)):
    browser = webdriver.Chrome('drivers/chromedriver')
    browser.get('https://www.example.com')
    print(browser.page_source)
    browser.quit()
Majid Zandi
  • 4,371
  • 5
  • 21
  • 29
0

You can simply pass an argument "headless" to test selenium without opening the browser.

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)

This code snippet will provide you exactly what you want.