java - Selenium 中切换窗口

标签 java selenium-webdriver

切换场景 我的应用程序中有 3 个窗口 单击我的第一个窗口将打开,并且切换代码在这里工作正常 现在当前控件位于第二页(窗口)。在第二个窗口中还有一个按钮将打开第三个窗口。我想切换到第三个窗口,但不想关闭我的第一个或第二个窗口。当我调用该切换方法时..它不起作用 我可以切换到 3 Windows 吗...?如果我要关闭第二个窗口,则会打开第三个窗口,但这里要求我不想关闭第一个或第二个窗口

下面是我正在使用的代码

public static void switchWindow() throws InterruptedException{

window = driver.getWindowHandle(); 
Set<String> allWin = driver.getWindowHandles();
for (String wh : allWin)
{
driver.switchTo().window(wh);
System.out.println(driver.getTitle());
}
}

public static void backtomainWindow()
{
//driver.close();
driver.switchTo().window(window);
}

我收到异常org.openqa.selenium.NoSuchWindowException:找不到窗口。浏览器窗口可能已关闭。

最佳答案

这是您查询的解决方案 -

public static WebDriver driver;
public static String strMainWindowHandle;
public static Map<String, String> lstWindowData;

public static void main(String[] args) throws Exception {


    driver = new FirefoxDriver();

    driver.navigate().to("url");
    strMainWindowHandle = driver.getWindowHandle();

    //button 1 (on parent window - window 1)
    driver.findElement(By.cssSelector("button_1")).click();
    switchToLatestWindow();

    //button 2 (on next window - window 2)
    driver.findElement(By.cssSelector("button_2")).click();
    switchToLatestWindow();

    //button 3 (on next window - window 3)
    //Same as above ... and so on...

    //Now to switch back to parent Window
    switchToParentWindow();

    //All spawned windows are still open
    //so if you wish to switch to a specific window "by Title"
    switchToSpecificWindow("WindowTitle");


}

public static void switchToLatestWindow() throws InterruptedException{

    Set<String> setAllWindows = driver.getWindowHandles();
    for (String windowHandle : setAllWindows)
    {
        if(!windowHandle.equals(strMainWindowHandle) && !lstWindowData.containsValue(windowHandle)){
            driver.switchTo().window(windowHandle);
            String strTitle = driver.getTitle();
            System.out.println(strTitle);
            //map will be useful later...
            lstWindowData.put(strTitle, windowHandle);
        }
    }
}

public static void switchToSpecificWindow(String strWindowTitle) throws InterruptedException {

    String strRequiredHandle = lstWindowData.get(strWindowTitle);
    Set<String> setAllWindows = driver.getWindowHandles();

    for(String windowHandle : setAllWindows){
        if(windowHandle.equals(strRequiredHandle)){
            driver.switchTo().window(windowHandle);        
        }
    }        
}

public static void switchToParentWindow()
{
    driver.switchTo().window(strMainWindowHandle);
}

关于java - Selenium 中切换窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409019/

相关文章:

java - 独立 chrome.exe 连接到 selenium 测试

java - 使用selenium grid remote webdriver java client截屏返回乱码

java - 如何使用 Eclipse 调试 Spring Boot 应用程序?

java - 如何在 M1 Macbook 上编译 OpenJDK 11?

java - 当鼠标进入组件控件时,如何阻止 SWT 复合控件触发 MouseExit 事件?

java - Selenium Webdriver 和 Firefox Server Not Found 错误

java - 不能重用方法android OOP

java - 如何以编程方式添加/删除任何应用程序的 EXE

javascript - Selenium Webdriver Java 无法处理 javascript :void(0), 打开新标签

python - Selenium Python For 循环遍历 HTML 表 我想迭代第一行而不是所有行