代码之家  ›  专栏  ›  技术社区  ›  ishandutta2007

在selenium驱动程序中。close()正在关闭所有选项卡,我只想关闭当前选项卡

  •  -2
  • ishandutta2007  · 技术社区  · 7 年前

    我的用例是在打开太多选项卡时,关闭除第一个选项卡以外的所有选项卡。 switch_to 效果非常好,问题在于收尾。我试着只关闭一个,然后打破循环,它仍然关闭所有东西,包括父选项卡。我猜是的 driver.close() 可能不是正确的方式。

    driver = webdriver.Chrome(CHROME_DRIVER_PATH)
    driver.get("https://google.com")
    
    //Do something here where multiple tabs get opened
    
    if len(driver.window_handles) > 5:
        for handle in driver.window_handles:
            if handle is not driver.current_window_handle:   
                driver.switch_to.window(handle)
                driver.close()
        driver.switch_to.window(driver.current_window_handle)
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Andrei Suvorkov    7 年前

    尝试替换:

    if driver.window_handles[i] != original_window_handle:
    

    与:

    if driver.window_handles[i] is not original_window_handle:
    
        2
  •  -1
  •   JeffC    7 年前

    代码中的一个主要问题是,只检查是否存在>5个手柄一次。。。然后进入一个循环,关闭所有选项卡(不检查句柄数)。我更改了逻辑,使其循环直到处理<=5.

    driver = webdriver.Chrome(CHROME_DRIVER_PATH)
    driver.get("https://google.com")
    
    //Do something here where multiple tabs get opened
    
    if len(driver.window_handles) > 5:
        current_window = driver.current_window_handle
        i = 0
        while len(driver.window_handles) > 1:
            if driver.window_handles[i] == current_window:
                i += 1
            else:
                driver.switch_to.window(driver.window_handles[i])
                driver.close()
    driver.switch_to.window(driver.current_window_handle)
    

    理想情况下,您可以将窗口句柄代码放入一个函数中,这样您就可以随时调用它,然后在完成一些操作后调用它,您知道这些操作将生成一些新窗口,并让它将它们全部清理干净。