简体   繁体   English

如何使用Selenium java在浏览器中的两个窗口之间切换

[英]How to switch between two windows in browser using Selenium java

I'm working with Selenium Automation.我正在使用 Selenium 自动化。 In this, When i click a link in a current window, a new window opens.在此,当我单击当前窗口中的链接时,会打开一个新窗口。 I just want to switch the control to the new window.我只想将控件切换到新窗口。 But i can't do this.但我不能这样做。 Actually the new window is an auto-generated one.实际上,新窗口是一个自动生成的窗口。 That is, link will be generated dynamically.也就是说,链接将是动态生成的。 Help me friends...帮帮我的朋友...

To switch between windows we have method.要在窗口之间切换,我们有方法。

driver.switchTo().window("window name") 

To get the different windows handle, we have method.要获得不同的窗口句柄,我们有方法。

driver.getWindowHandles()

Example:示例:

    File file = new File("G:\\Selenium\\All_Jars\\chromedriver.exe");
    System.setProperty("webdriver.chrome.driver",file.getAbsolutePath() );
    driver = new ChromeDriver();

    //Maximize the window
    driver.manage().window().maximize();

    driver.get("http://www.rediff.com/");

    //Get all window handles
    Set<String> allHandles = driver.getWindowHandles();

    //count the handles Here count is=2
    System.out.println("Count of windows:"+allHandles.size());      

    //Get current handle or default handle
    String currentWindowHandle = allHandles.iterator().next();
    System.out.println("currentWindow Handle"+currentWindowHandle);

    //Remove first/default Handle
    allHandles.remove(allHandles.iterator().next());

    //get the last Window Handle
    String lastHandle = allHandles.iterator().next();
    System.out.println("last window handle"+lastHandle);

    //switch to second/last window, because we know there are only two windows 1-parent window 2-other window(ad window)
driver.switchTo().window(lastHandle);
    System.out.println(driver.getTitle());
    driver.findElement(By.tagName("body")).click();

Yes this is possible.是的,这是可能的。 First you need to save the refrence to current window.首先,您需要将引用保存到当前窗口。

String parentWindow= driver.getWindowHandle();

The after having clicked the link, you need to switch to the other window.单击链接后,您需要切换到另一个窗口。

List<String> allWindows = driver.getWindowHandles();
for(String curWindow : allWindows){
    driver.switchTo().window(curWindow);
}

This is where you perform operations on new window, finally closing it with这是您在新窗口上执行操作的地方,最后用

driver.close();

and switch back to parent window并切换回父窗口

driver.switchTo().window(parentWindow);

I finally found the answer, I used the below method to switch to the new window,我终于找到了答案,我用下面的方法切换到新窗口,

public String switchwindow(String object, String data){
        try {

        String winHandleBefore = driver.getWindowHandle();

        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
        }catch(Exception e){
        return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage();
        }
        return Constants.KEYWORD_PASS;
        }

To move to parent window, i used the following code,要移动到父窗口,我使用了以下代码,

 public String switchwindowback(String object, String data){
            try {
                String winHandleBefore = driver.getWindowHandle();
                driver.close(); 
                //Switch back to original browser (first window)
                driver.switchTo().window(winHandleBefore);
                //continue with original browser (first window)
            }catch(Exception e){
            return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage();
            }
            return Constants.KEYWORD_PASS;
            }

In an excerpt from a getting started with selenium webdriver project on github,在 github 上的selenium webdriver项目入门的摘录中,

    /**
     * Waits for a window to appear, then switches to it.
     * @param regex Regex enabled. Url of the window, or title.
     * @return
     */
    public AutomationTest waitForWindow(String regex) {
        Set<String> windows = driver.getWindowHandles();

        for (String window : windows) {
            try {
                driver.switchTo().window(window);

                p = Pattern.compile(regex);
                m = p.matcher(driver.getCurrentUrl());

                if (m.find()) {
                    attempts = 0;
                    return switchToWindow(regex);
                }
                else {
                    // try for title
                    m = p.matcher(driver.getTitle());

                    if (m.find()) {
                        attempts = 0;
                        return switchToWindow(regex);
                    }
                }
            } catch(NoSuchWindowException e) {
                if (attempts <= MAX_ATTEMPTS) {
                    attempts++;

                    try {Thread.sleep(1);}catch(Exception x) { x.printStackTrace(); }

                    return waitForWindow(regex);
                } else {
                    fail("Window with url|title: " + regex + " did not appear after " + MAX_ATTEMPTS + " tries. Exiting.");
                }
            }
        }

        // when we reach this point, that means no window exists with that title..
        if (attempts == MAX_ATTEMPTS) {
            fail("Window with title: " + regex + " did not appear after 5 tries. Exiting.");
            return this;
        } else {
            System.out.println("#waitForWindow() : Window doesn't exist yet. [" + regex + "] Trying again. " + attempts + "/" + MAX_ATTEMPTS);
            attempts++;
            return waitForWindow(regex);
        }
    }

    /**
     * Switch's to a window that is already in existance.
     * @param regex Regex enabled. Url of the window, or title.
     * @return
     */
    public AutomationTest switchToWindow(String regex) {
        Set<String> windows = driver.getWindowHandles();

        for (String window : windows) {
            driver.switchTo().window(window);
            System.out.println(String.format("#switchToWindow() : title=%s ; url=%s",
                    driver.getTitle(),
                    driver.getCurrentUrl()));

            p = Pattern.compile(regex);
            m = p.matcher(driver.getTitle());

            if (m.find()) return this;
            else {
                m = p.matcher(driver.getCurrentUrl());
                if (m.find()) return this;
            }
        }

        fail("Could not switch to window with title / url: " + regex);
        return this;
    }

These are 2 custom functions to help you get started.这些是帮助您入门的 2 个自定义函数。 Or you can check out that project from github to make your selenium projects better designed and easier.或者您可以从 github 查看该项目,以使您的 selenium 项目设计得更好、更容易。

These functions can switch to, or wait for (if it doesn't exist) a window with a certain title / url.这些函数可以切换到或等待(如果它不存在)具有特定标题/网址的窗口。

      Set <String> set = driver.getWindowHandles();
      Iterator<String> it = set.iterator();
      String parentWindowId = it.next();
      String childWindowId = it.next();
      System.out.println(set);
      driver.switchTo().window(childWindowId);
    // fetch all windows before clicking on new window link.
    Set<String> windowHandles = driver.getWindowHandles();
    // Click on link to open new window
    driver.findElement(By.tagName("a")).click();  // link to open new window

    Set<String> updatedWindowHandles = driver.getWindowHandles();
    updatedWindowHandles.removeAll(windowHandles);
    for (String window: updatedWindowHandles) {
        driver.switchTo().window(window);
    }
//to get the current/parent window

String parentWindowContact = driver.getWindowHandle();

//to switch to the new window from current/parent window

Set<String> handleswindow =driver.getWindowHandles();

for(String windowHandle : handleswindow)

{

   driver .switch To().window(windowHandle);

}

//to close the new window

driver.close();

//to switch back to the parent window

driver.switchTo().window(parentWindowContact);
          o switch back to the parent window

driver.switchTo().window(parentWindowContact);

Here is the best methods to switch in window using index and title.这是使用索引和标题在窗口中切换的最佳方法。 you can add in base class and use it frequently.您可以添加基类并经常使用它。

public  void switchToWindow(String windowTitle) {
    Set<String> windows = driver.getWindowHandles();
    for (String window : windows) {
        driver.switchTo().window(window);
        if (driver.getTitle().contains(windowTitle)) {
            return;
        }
    }
}




  public void switchToWindow(int index) {
    Set<String> windows = driver.getWindowHandles();
    int totalWin= windows.size();
    String winTitle = null;
    for(int i=0;i<totalWin;i++) {
        if(i==index) {
        winTitle = windows.toArray()[i].toString();
    }
    }
    driver.switchTo().window(winTitle);
    System.out.println(winTitle);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Selenium Java在浏览器中的两个窗口之间切换 - switch between two windows in browser using Selenium java 如何在 java 中使用 selenium 在两个或多个 chrome 浏览器 windows(不是标签)之间切换? - How to switch between two or mutlple chrome browser windows (Not tabs) using selenium in java? 无法使用Selenium WebDriver在两个浏览器窗口之间切换 - Unable to switch between two browser windows using Selenium WebDriver 如何使用带有Java的Selenium WebDriver在Chrome中的Windows之间切换? - How to switch between windows in Chrome using Selenium WebDriver with Java? 如何使用 Selenium Java 在两个浏览器选项卡/窗口之间获取活动的 window 标题 - How to get an active window title between two browser tabs/windows using Selenium Java Selenium Web驱动程序| Java | 无法在Firefox浏览器窗口之间切换 - Selenium web driver | java | unable to switch between firefox browser windows 使用带有 Java 的 Selenium WebDriver 在浏览器选项卡之间切换 - Switch between browser tabs using Selenium WebDriver with Java 如何使用Selenium和Java将控件从1个Chrome浏览器切换到另一个 - how to switch the control from 1 chrome browser to another using selenium with java 如何在 selenium 测试中使用 java 代码检测两个 chrome 浏览器 windows 之间的音频连接? - How to detect audio connection between two chrome browser windows using jave code in selenium tests? 如何使用Java在Selenium WebDriver中切换帧 - How to switch between frames in Selenium WebDriver using Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM