硒开关标签

时间:2018-12-09 07:21:05

标签: python selenium tabs webdriverwait window-handles

由于Firefox不再支持该选项卡的Control + T,因此我开始使用     driver.execute_script(“ window.open('URL','new_window')”)

我试图显示我打开的其他标签的标题并在它们之间切换。对于下面的示例,我希望输出为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)

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

  • 始终跟踪父窗口句柄,以便以后根据需要根据需要进行遍历。
  • 标签/ Windows 之间切换之前,始终将WebDriverWaitexpected_conditions用作number_of_windows_to_be(num_windows)
  • 始终跟踪子窗口句柄,以便您可以在需要时遍历。
  • 在提取页面标题之前,始终将expected_conditions作为title_contains("partial_page_title")使用 WebDriverWait
  • 这是您自己的代码,上面有一些小的调整:

    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
    

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这个命令总是带你到最近打开的 chrome 新标签页。在最新版本的 Chrome 和 Pytest 上在 mac 上进行测试。

selenium.switch_to.window(selenium.window_handles[-1])