【问题标题】:Python Selenium Webdriver Handling Multiple Windows At The Same TimePython Selenium Webdriver 同时处理多个窗口
【发布时间】:2017-01-06 14:50:51
【问题描述】:

我正在做一个项目,在这个项目中,我需要检查两个网页。我必须在不同的窗口中同时打开这两个网页并同时检查它们。

必须有两个窗口,并且有一个检查元素状态的功能。但是这个功能必须同时检查它们。我该如何解决这个问题?
谢谢

【问题讨论】:

    标签: python selenium window selenium-chromedriver


    【解决方案1】:

    您一次可以打开多个浏览器:

    from selenium import webdriver
    
    driver1 = webdriver.Firefox()
    driver2 = webdriver.Firefox()
    
    driver1.get(...)
    driver2.get(...)
    

    如果您想要两个窗口进入当前驱动程序会话,您可以使用一点 javascipt 来打开带有单个驱动程序的第二个窗口:

    driver.execute_script("$(window.open('http://www.example.com'))")
    window1 = driver.window_handles[0]
    window2 = driver.window_handles[1]
    
    # test the first window
    driver.switch_to_window(window1)
    ...
    
    # test the second window
    driver.switch_to_window(window2)
    ...
    

    【讨论】:

      【解决方案2】:

      我不确定是否会在完全同时进行,但您可以在单独的选项卡中打开其中一个页面,然后在两者之间移动以进行比较。

      driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
      ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
      driver.switchTo().window(tabs.get(0));
      ***get value to compare**** 
      driver.switchTo().window(tabs.get(1));
      driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"Keys.TAB");
      ***get second value and compare***
      

      如果没有,也许考虑使用 Selenium Grid 并行运行两个测试。 我只是在写完答案后才发现您正在使用 Python 工作,但我确定有一个等价物。

      【讨论】: