bo wen
bo wen

Reputation: 33

How to switch between different chrome browser window opened by different WebDriver using selenium in Python?

I searched for this question,and I found an idea using driver.switch_to.window(),but it didn't work as expect:

from selenium import webdriver

driver1=webdriver.Chrome("D:\Python\Files\chromedriver.exe")
driver1.get('https://www.google.com')


driver2=webdriver.Chrome("D:\Python\Files\chromedriver.exe")
driver2.get('https://www.bing.com/')

driver1.switch_to.window(driver1.current_window_handle)

above code will first open a chrome window and go to google,then will open another chrome window and go to bing,then

driver1.switch_to.window(driver1.current_window_handle)

seems didn't work,the window showing bing still shows on top of the window showing google. Anyone have any idea?I think

driver1.switch_to.window(driver1.current_window_handle)

may have some BUG.

Upvotes: 2

Views: 3423

Answers (2)

undetected Selenium
undetected Selenium

Reputation: 193058

As you have used two WebDriver instances as driver1 and driver2 respectively to openthe urls https://www.google.com (e.g. windowA) and https://www.bing.com/ (e.g. windowB) it is worth to mention that the function switch_to.window() is a WebDriver method. So, driver1 can control only windowA and driver2 can control only windowB.

For Selenium to interact with any of the Browsing Window, Selenium needs focus. So to iterate among the different Browsing Windows you can shift the focus to the different Browsing Window using JavascriptExecutor as follows :

  • Python:

    driver1.execute_script("window.focus();")
    driver2.execute_script("window.focus();")
    
  • Java:

    ((JavascriptExecutor) driver1).executeScript("window.focus();");
    ((JavascriptExecutor) driver2).executeScript("window.focus();");
    

Upvotes: 4

Aldo Suwandi
Aldo Suwandi

Reputation: 392

I believe you have a different concept of "window" in driver.switch_to.window(). In chrome browser, it means "tab". It's not another chrome browser or browser window like what are you trying to do in your code.

If switch_to.window() what you really want, I'll give an example how to use it:

driver=webdriver.Chrome("D:\Python\Files\chromedriver.exe")
driver.get('https://www.google.com')
# open a new tab with js
driver.execute_script("window.open('https://www.bing.com')")
driver.switch_to.window(driver.window_handles[-1])
# now your driver is pointed to the "tab" you just opened

Upvotes: 1

Related Questions