9

I want to close all open tabs (browser windows) without actually closing the driver, because I want to keep using it.

driver.close() will just close the focused tab.
driver.quit() will close them all but also quit the driver.

I thought about using driver.quit() and then re-opening the driver. But it does not seem very clean. Or maybe it is super clean, but also a slow thing to do.

Note: Using Firefox via geckodriver

How can I approach this?

Guy
  • 46,488
  • 10
  • 44
  • 88
Álvaro N. Franz
  • 1,188
  • 3
  • 17
  • 39

5 Answers5

10

Window handles can be used for that as well. Loop through all opened windows and close them:

for handle in driver.window_handles:
    driver.switch_to.window(handle)
    driver.close()

This should close all browser windows.

automationleg
  • 323
  • 6
  • 11
8
curr=driver.current_window_handle
for handle in driver.window_handles:
   driver.switch_to.window(handle)
   if handle != curr:
      driver.close()
Stephin
  • 91
  • 1
  • 2
4

You can close the tabs by sending ctrl + w to the page until you don't have any tabs left. Keep a record of how many tabs you opened and use a loop to close them

from selenium.webdriver.common.keys import Keys

num_of_tabs = ...
for x in range(1, num_of_tabs):
    self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'W')

This will close all the tabs but one. Closing the last one will not close the driver, but you won't be able to use it.

Guy
  • 46,488
  • 10
  • 44
  • 88
  • 1
    Curiosity. Is "self" really necessary here? – Álvaro N. Franz Jul 17 '17 at 10:39
  • 1
    @Salamarkesa I saw the edit suggestion. I'm not using `geckodriver` but as far as I know new tabs in FireFox doesn't have other window handles, you will have total of one. – Guy Jul 17 '17 at 10:48
  • Okay, my confusion. Thank you. Which browser do you use and why? [I am new to selenium but want to make the best out of it]. Since this branched away from the original question, you feel free to ignore my comment. – Álvaro N. Franz Jul 17 '17 at 10:55
  • 1
    @Salamarkesa We are using FireFox version 47, so no need to use `geckodriver`. I understood from discussions with colleges (so no official source to reference) that `geckodriver` is not yet built by other drivers standards so there might be issues we prefer to avoid for now. – Guy Jul 17 '17 at 10:59
  • Would like to note that this will work for Python, but if you are looking to use another language (such as Ruby or PHP, as two examples from memory), there are limited ways to interact with tabs, and simple keyboard shortcuts don't work as expected. There are methods to switch between browser windows that have been opened, but I haven't found any to actually open up a new tab (for Ruby at least). – KyleFairns Jul 17 '17 at 14:10
1

This will only close window, your selenium driver session still runs.

driver.switch_to.window(driver.window_handles[0])
0

simply using this to ommit first tab, solution works for me!

    try:
    firstTime = True
    for handle in browser.window_handles:
        browser.switch_to.window(handle)
        if(not firstTime):
            browser.close()
        firstTime = False
except:
    return
Sonic
  • 21
  • 2