由于Firefox不再支持Control T,我开始使用driver.execute_script(“window.open('URL','new_window')”)
我试图显示我打开的不同选项卡的 Headers ,并在它们之间切换 . 对于下面的示例,我希望输出为facebook,google和返回facebook . 现在输出是facebook,facebook和facebook .
我从这里尝试了答案,但它也没有用:Switch back to parent tab using selenium webdriver
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
driver.execute_script("window.open('http://google.com', 'new_window')")
print(driver.title)
driver.switch_to.window(driver.window_handles[0])
print(driver.title)
更新:我尝试了以下代码,它仍然无法正常工作 .
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
window_before = driver.window_handles[0]
driver.execute_script("window.open('http://google.com', 'new_window')")
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
print(driver.title)
3 回答
关于Tab / Window切换/处理的几句话:
始终跟踪父窗口句柄,以便稍后根据您的用例进行遍历 .
在Tabs / Windows之间切换之前,始终使用WebDriverWait和expected_conditions作为number_of_windows_to_be(num_windows) .
始终跟踪子窗口句柄,以便您可以在需要时进行遍历 .
在提取页面 Headers 之前,始终使用WebDriverWait和
expected_conditions
作为title_contains("partial_page_title") .这是您自己的代码,上面提到了一些小调整:
我用
driver.getWindowHandles();
来获取所有窗口,driver.switchTo().window(handle);
切换到所需的窗口 .window.open
将在新标签中打开链接 . Selenium Firefox驱动程序无法在标签之间切换,因为它们只有一个窗口句柄(不像Chrome有2个) . 如果给出带有宽度和高度的window()
命令'specs'参数,它将打开一个新窗口,您将能够切换 .打开新窗口后,驱动程序仍然专注于第一个窗口,您需要先切换到新窗口 .