首页 文章

Selenium Switch标签

提问于
浏览
0

由于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 回答

  • 0

    关于Tab / Window切换/处理的几句话:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
    driver.get("http://www.facebook.com/")
    print("Initial Page Title is: %s" %driver.title)
    windows_before  = driver.current_window_handle
    driver.execute_script("window.open('http://google.com')")
    WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
    windows_after = driver.window_handles
    new_window = [x for x in windows_after if x != windows_before][0]
    driver.switch_to.window(new_window)
    WebDriverWait(driver, 20).until(EC.title_contains("G"))
    print("Page Title after first window switching is: %s" %driver.title)
    driver.close()
    driver.switch_to.window(windows_before)
    WebDriverWait(driver, 20).until(EC.title_contains("F"))
    print("Page Title after second window switching is: %s" %driver.title)
    driver.quit()
    
    • 控制台输出:
    Initial Page Title is: Facebook – log in or sign up
    Page Title after first window switching is: Google
    Page Title after second window switching is: Facebook – log in or sign up
    
  • 1

    我用 driver.getWindowHandles(); 来获取所有窗口, driver.switchTo().window(handle); 切换到所需的窗口 .

  • 1

    window.open 将在新标签中打开链接 . Selenium Firefox驱动程序无法在标签之间切换,因为它们只有一个窗口句柄(不像Chrome有2个) . 如果给出带有宽度和高度的 window() 命令'specs'参数,它将打开一个新窗口,您将能够切换 .

    打开新窗口后,驱动程序仍然专注于第一个窗口,您需要先切换到新窗口 .

    size = driver.get_window_size();
    driver.execute_script("window.open('http://google.com', 'new_window', 'height=argument[0], width=argument[1]')", size['height'], size['width'])
    driver.switch_to.window(driver.window_handles[1])
    print(driver.title)
    

相关问题