Selenium获取新窗口的会话ID - Python

时间:2017-05-21 15:41:37

标签: python selenium selenium-webdriver automated-tests

我正在使用Selenium对Chrome进行一些检查。 我自动浏览到“chrome:// flags / #enable-quic”,然后在下拉列表中我自动选择“启用”。 如下所述,必须重新启动才能使更改生效。 我想在新重新启动的窗口上打开一个新标签,以便做更多的事情。

代码剪辑:

browser = webdriver.Chrome()
browser.get("chrome://flags/#enable-quic")
browser.find_element_by_xpath("//*[@id='enable-quic']/table/tbody/tr/td/div[1]/div/div[2]/select/option[2]").click() #Select "Enable"
time.sleep(5)
browser.find_element_by_xpath("//*[@id='flagsTemplate']/div[5]/button").click() #Click relaunch
time.sleep(5)
browser.execute_script("window.open('https://www.gmail.com');")  #Exception after this line

我得到的例外是:

selenium.common.exceptions.NoSuchWindowException: Message: no such window: window was already closed

有人知道如何处理这个问题吗?

由于

2 个答案:

答案 0 :(得分:2)

点击"Refresh"按钮后,您会看到新的Chrome窗口。您应该在执行JavaScript之前尝试切换到该窗口:

browser = webdriver.Chrome()
browser.get("chrome://flags/#enable-quic")
browser.find_element_by_xpath("//div[@id='enable-quic']//select[@class='experiment-select']/option[2]").click()
time.sleep(5)
browser.find_element_by_xpath("//button[@class='experiment-restart-button']").click()
time.sleep(5)
browser.switch_to.window(browser.window_handles[0])
browser.execute_script("window.open('https://www.gmail.com');")

答案 1 :(得分:2)

重新启动Chrome是一个坏主意,因为Chromedriver引用了原始的Chrome流程。

  

no such window: window was already closed

所以... browser仍然指向旧窗口。

只需在创建Chromedriver实例时设置该选项,而不是尝试重新启动Chrome。

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--enable-quic')
chrome = webdriver.Chrome(chrome_options=chrome_options)