【问题标题】:How to close the Child Windows? in the Selenium WebDriver - By Using the FunctionalClass如何关闭子窗口?在 Selenium WebDriver - 通过使用 FunctionalClass
【发布时间】:2013-08-29 19:44:00
【问题描述】:

如何关闭子窗口?在 Selenium WebDriver - 通过使用 FunctionalClass 嗨,我正在使用 Selenium Web 驱动程序和框架,在我的应用程序中当我点击

一个链接按钮,然后子窗口将显示在屏幕上,现在如何关闭

子窗口。

public class Reports
{
    public void RPS(WebDriver driver) throws Exception
    {
        AllpagesLogins ALP= new AllpagesLogins();
        //Clicking on the Reports Menu Btn-- Use for Menu Button upper and down
        WebElement element1 = driver.findElement(By.id(ALP.RP_Reports_MenuBtn_ID));
        ((JavascriptExecutor) driver).executeScript("arguments[0].click()", element1);
        System.out.println("Clicked on the Reports Menu Btn");
        Thread.sleep(1000);
        //Clicking on the Particular Link Button
        if(driver.findElement(By.linkText("Congratulations Sandeep Pushpala!!!")).isDisplayed())
        {
            System.out.println("Link Button is Displayed");
            driver.findElement(By.linkText("Congratulations Sandeep Pushpala!!!")).click();
            System.out.println("Clicked on the Link Button Which is Displayed");
            Thread.sleep(2000);
        }
        else
        {
            System.out.println("Link Button is Not Displayed");
        }
        //clicking on the First Link Button, It will display the First Child Window
        ////////////////////////////11111111111111
        if(driver.findElement(By.id(ALP.RP_TotalRecipients_LnkBtn_ID)).isEnabled())
        {
            System.out.println("LnkBtnTotalRecipientsID Link Button is Enabled");
            driver.findElement(By.id(ALP.RP_TotalRecipients_LnkBtn_ID)).click();
            System.out.println("Clicked on the LnkBtnTotalRecipientsID Button");
            Thread.sleep(2000);
        }
        else
        {
            System.out.println("Link Button is Total Recipients is Not Displayed");
        }
        //clicking on the Second Link Button, It will display the Second Child Window
        ////////////////////////////2222222222222222222
        if(driver.findElement(By.id(ALP.RP_SuccessfullRecipientsData_LnkBtn_ID)).isEnabled())
        {
            System.out.println("SuccessfullRecipientsDataID Link Button is Enabled");
            driver.findElement(By.id(ALP.RP_SuccessfullRecipientsData_LnkBtn_ID)).click();
            System.out.println("Clicked on the LinkSuccessfullRecipientsDataID Button");
            Thread.sleep(2000);
        }
        else
        {
            System.out.println("Link Button is SuccessfullRecipientsDataID is Not Displayed");
        }
        //clicking on the Third Link Button, It will display the Third ![enter image description here][1]Child Window
        ///////////////////////////////333333333333333333333333333
        if(driver.findElement(By.id(ALP.Rp_NotSucessfullRecipientsData_LnkBtn_ID)).isEnabled())
        {
            System.out.println("NotSucessfullRecipientsDataID Link Button is Enabled");
            driver.findElement(By.id(ALP.Rp_NotSucessfullRecipientsData_LnkBtn_ID)).click();
            System.out.println("Clicked on the LinkNotSucessfullRecipientsDataID Button");
            Thread.sleep(2000);
        }
        else
        {
            System.out.println("Link Button is Successfully Recipients Data ID is Not Displayed");
        }
        for Closing the Child Windows I am Using This Code
        //Closing the First Child Window
        driver.close();
        System.out.println("First Child Window is Closed");
        Thread.sleep(2000);
        //Closing the Second Child Window
        driver.close();
        System.out.println("Second Child Window is Closed");
        Thread.sleep(2000);
        //Closing the Third Child Window
        driver.close();
        System.out.println("Third Child Window is Closed");
        Thread.sleep(2000);

【问题讨论】:

    标签: java selenium-webdriver


    【解决方案1】:

    我有一个实用方法可以切换到所需的窗口,如下所示

    public class Utility 
    {
        public static WebDriver getHandleToWindow(String title){
    
            //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
            WebDriver popup = null;
            Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
            System.err.println("No of windows :  " + windowIterator.size());
            for (String s : windowIterator) {
              String windowHandle = s; 
              popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
              System.out.println("Window Title : " + popup.getTitle());
              System.out.println("Window Url : " + popup.getCurrentUrl());
              if (popup.getTitle().equals(title) ){
                  System.out.println("Selected Window Title : " + popup.getTitle());
                  return popup;
              }
    
            }
                    System.out.println("Window Title :" + popup.getTitle());
                    System.out.println();
                return popup;
            }
    }
    

    一旦窗口的标题作为参数传递,它将带您到所需的窗口。 在你的情况下,你可以这样做。

    Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
    childDriver.close();
    

    然后用同样的方法再次切换到父窗口

    Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");
    

    此方法在处理多个窗口时有效。

    【讨论】:

      【解决方案2】:

      您必须使用switchTo() method 切换到另一个窗口:

      String firstWindow = driver.getWindowHandle();
      // execute code to open a second window
      
      // close the first window
      driver.switchTo().window(firstWindow).close();
      

      【讨论】:

      • 通过使用此代码,我正在关闭父窗口,但我需要关闭子窗口,
      【解决方案3】:
          List<String> windows = new ArrayList<>(driver.getWindowHandles());//Returning Set
          for (String s: windows) { System.out.println("window: " + s);} // Let's see names
          String parentWindow = windows.get(0); //In my case, I have two windows.
          String childWindow = windows.get(1); 
      
          driver.switchTo().window(parentWindow).close();
          driver.switchTo().window(childWindow).close();
      

      【讨论】:

        猜你喜欢
        • 2023-01-11
        • 2017-07-24
        • 2013-05-26
        • 2016-08-12
        • 2012-07-12
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多