I know how to open a new window using selenium. But I want a new tab in the same window of chrome which I am using. How to do that?
I already try:
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_experimental_option('debuggerAddress', 'localhost:9014')
driver = webdriver.Chrome(options=options)
try:
button = driver.find_element(By.CLASS_NAME, 'button')
button.click()
finally:
driver.quit()
You can achieve the opening/closing of a tab by the combination of keys:
Ctrl + T or Ctrl + W
You can trigger this shortcut on body of the page, to open new tab within the window, like this:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.google.com/")
#open tab
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
# You can use (Keys.CONTROL + 't') on other OSs
# Load a page
driver.get('http://stackoverflow.com/')
# Make the tests...
# close the tab
# (Keys.CONTROL + 'w') on other OSs.
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'w')
driver.close()
I hope this solves your problem.
Related
I want to open a new tab and close the previous tab. But it seems doesn't work! it just open the first link and throws the error: no such window: target window already closed
from selenium import webdriver
driver = webdriver.Chrome()
urls = ['https://google.com','https://facebook.com','https://instagram.com']
for i in range(3):
driver.execute_script("window.open('"+ str(urls[i]) +"');")
driver.close()
Thanks in advance!
After opening a new tab you need to close the current (old) tab and then to switch to the new tab.
The code below works
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("start-maximized")
webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(service=webdriver_service, options=options)
urls = ['https://google.com', 'https://facebook.com', 'https://instagram.com']
for i in range(3):
# open a new tab
driver.execute_script("window.open('" + str(urls[i]) + "');")
# close the current, old tab
driver.close()
# get the handle of the new, recently opened tab
window_name = driver.window_handles[0]
# switch to the recently opened tab
driver.switch_to.window(window_name=window_name)
I am trying to use CTRL + S in selenium to save contents of a page but can't get anything happening. If I try to do it using my keyboard the save window opens.
from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.maximize_window()
action_chains = ActionChains(driver)
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=C:/Downloads, download.prompt_for_download=False")
driver = webdriver.Chrome(options=options)
driver.get("https://imagecyborg.com/")
action_chains.send_keys(Keys.CONTROL).send_keys("s").perform()
The only thing that worked for me was pyautogui:
import pyautogui
pyautogui.hotkey('ctrl','s')
pyautogui.press('enter')
I should be able to open a new tab in selenium for python using the code
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")
body = driver.find_element_by_tag_name("body")
body.send_keys(Keys.COMMAND + 't')
But no new tab opens, and no error message appears (http://stackoverflow.com/ does load).
Note that I am using Keys.COMMAND + 't' because I am running the code on OS X.
I have no idea what is causing the issue as posts like this one, indicate that my code should work.
Updated to include answers
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")
current_tab = driver.current_window_handle
driver.execute_script('window.open();')
new_tab = [tab for tab in driver.window_handles if tab != current_tab][0]
driver.switch_to.window(new_tab)
driver.get("http://github.com")
inputElement = driver.find_element_by_id("user[login]")
inputElement.send_keys('1')
current_tab = driver.current_window_handle
driver.execute_script('window.open();')
new_tab = [tab for tab in driver.window_handles if tab != current_tab][0]
driver.switch_to.window(new_tab)
driver.get("http://github.com")
inputElement = driver.find_element_by_id("user[email]")
inputElement.send_keys('2')
Try below code to open new tab and switch to it:
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")
current_tab = driver.current_window_handle
driver.execute_script('window.open("http://github.com");')
new_tab = [tab for tab in driver.window_handles if tab != current_tab][0]
driver.switch_to.window(new_tab)
inputElement = driver.find_element_by_id("user[login]")
inputElement.send_keys('1')
driver.execute_script('window.open("http://github.com");')
third_tab = [tab for tab in driver.window_handles if tab not in (current_tab, new_tab)][0]
driver.switch_to.window(third_tab)
inputElement = driver.find_element_by_id("user[email]")
inputElement.send_keys('2')
You can use driver.close() to close new tab and driver.switch_to.window(current_tab) to switch back to initial tab
Also note that you can pass page URL you want to open in new tab as argument to window.open() like:
driver.execute_script('window.open("https://google.com");')
Try below code to open new tab in MAC:-
String clickOnTabLink = Keys.chord(Keys.COMMAND, "t", Keys.ENTER);
link.sendKeys(clickOnTabLink);
I'm using Selenium (with Firefox) to test a web service and i need to be able to swap between multiple tabs but i don't know how to do that. I tried the following but it doesn't work. What am i doing wrong?
from selenium import webdriver
driver = webdriver.Firefox()
# OPEN UP THE MULTIPLE TABS
for i in driver.window_handles:
driver.switch_to.window(i) # I HAVE TRIED switch_to_window(i) TOO
I also tried saving each window handle in my own list, and using that instead of window_handles but that didn't work either.
Here, I give code which open new Tab and Close it.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()#Chrome("chromedriver.exe")
try:
driver.get("http://www.google.co.in")
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
driver.get("http://www.stackoverflow.com")
#driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 'w')
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.TAB)
#driver.close()
except Exception as e:
print e
To open multiple windows, you could execute window.open with execute_script :
driver = webdriver.Chrome()
driver.get("https://www.google.co.in/search?q=search1")
driver.execute_script("window.open(arguments[0], 'win2')", \
"https://www.google.co.in/search?q=search2")
driver.execute_script("window.open(arguments[0], 'win3')", \
"https://www.google.co.in/search?q=search3")
driver.execute_script("window.open(arguments[0], 'win4')", \
"https://www.google.co.in/search?q=search4")
driver.switch_to_window("win4")
I am working on the below script to open multiple website in new tabs. This is working fine in Firefox as expected.
But it is not working in Chrome. It opens a new tab as the second tab, but the second website link opens in the first tab itself. Later again a new tab is opened as the third tab, then the third link opens in the first tab itself. The commented part ( 5 th line ) is how I call the chromedriver.exe.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox() #Chrome('C:\\data\\books oae\\apex library\\chromedriver') #Firefox()
browser.get('https://trello.com/login')
time.sleep(10)
emailElem = browser.find_element_by_id('user')
emailElem.send_keys('test123#gmail.com')
passwordElem = browser.find_element_by_id('password')
passwordElem.send_keys('test12345')
passwordElem.submit()
body = browser.find_element_by_tag_name("body")
body.send_keys(Keys.CONTROL + 't')
browser.get('https://todoist.com/Users/showLogin')
time.sleep(10)
emailElem = browser.find_element_by_id('email')
emailElem.send_keys('test123#gmail.com')
passwordElem = browser.find_element_by_id('password')
passwordElem.send_keys('test12345')
passwordElem.submit()
body = browser.find_element_by_tag_name("body")
body.send_keys(Keys.CONTROL + 't')
browser.get('https://asana.com/#login')
time.sleep(10)
emailElem = browser.find_element_by_id('login-email-login-modal')
emailElem.send_keys('test123#gmail.com')
passwordElem = browser.find_element_by_id('login-password-login-modal')
passwordElem.send_keys('test12345')
passwordElem.submit()
Splinter is the answer to your problem. It's a wrapper around Selenium that does all your Display-handling for you. Just by creating new Splinter objects, you open new windows. You can specify if you want them to be Chrome or Firefox.