【问题标题】:Selenium Webdriver How to switch between different Firefox windowsSelenium Webdriver 如何在不同的 Firefox 窗口之间切换
【发布时间】:2012-08-23 11:36:44
【问题描述】:

为了以 4 个不同的角色登录会议,对于我写的每个角色

System.setProperty("webdriver.firefox.profile", "default");
FirefoxDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
driver.get("link to the conference");

那么我该如何在 Firefox 窗口之间切换呢? Windows 标题是相同的。 谢谢

【问题讨论】:

  • 您是否正在为每个角色创建一个新的 FirefoxDriver?如果是这种情况,您应该只使用与每个窗口对应的 FirefoxDriver。

标签: firefox selenium junit webdriver selenium-webdriver


【解决方案1】:

如果您愿意,可以使用此代码在窗口之间导航,您可以根据需要进行更改

//All the window handles will be returned and u can use window handle to switch between the windows

Set<String> windows = getWebDriver().getWindowHandles();

    Iterator<String> window = windows.iterator();


    while( window.hasNext() ) {

        getWebDriver().switchTo().window( window.next() );

    }

【讨论】:

    【解决方案2】:
    public TasksWindow OpenInWindow() {
        WebDriverWait wait = new WebDriverWait(Driver.driver, TimeSpan.FromSeconds(10));
        wait.IgnoreExceptionTypes(typeof(AssertionException));
        String windowName = wait.Until<String>((d) => {
            this.windowSwitcher.Click();
    
            if (d.WindowHandles.Count != 2) // this means you are waiting till the number of windows equals 2 {
                return null;
            }
    
            return d.WindowHandles[1]; // this means you are changing to the second window (from [0] to [1])
        });
    
        return new TasksWindow(windowName);
    }
    

    这在 c# 中有效

    【讨论】: