【问题标题】:How to switch control from child window to parent window in selenium webdriver?如何在 selenium webdriver 中将控件从子窗口切换到父窗口?
【发布时间】:2013-01-15 05:28:18
【问题描述】:
  • 从父窗口我将控件传递给子窗口
  • 我正在子窗口中执行操作
  • 执行后,将从子窗口中打开另一个窗口(Child 第一个子窗口)。
  • 我必须关闭两个子窗口并返回到 父窗口。

    我无法将控件从子窗口切换到父窗口。我已经尝试了以下代码

     String winHandleBefore = _driver.getWindowHandle();
    for(String winHandle : _driver.getWindowHandles()){
        _driver.switchTo().window(winHandle);
    }
    
    String winHandleAfter = _driver.getWindowHandle();
    

    /在子窗口中执行操作/

    driver.close();
    _driver.switchTo().window(winHandleBefore);
    

【问题讨论】:

  • 你能把控件切换到第一个子窗口吗?
  • 您问的是从第二个子窗口切换到第一个子窗口还是从父窗口切换到第一个子窗口?
  • 为什么不能用窗口名切换?有什么理由吗?您想对第一个子窗口的子窗口执行任何操作吗?
  • 我问的是关闭 2 子窗口后将控制权从第二个子窗口转移到第一个子窗口?
  • @Santoshsarma 是的。我可以转移。但问题是我无法将它从第一个子窗口转移到父窗口。

标签: selenium selenium-webdriver


【解决方案1】:

使用此代码:

 // Get Parent window handle
 String winHandleBefore = _driver.getWindowHandle();
 for (String winHandle : _driver.getWindowHandles()) {
   // Switch to child window
   driver.switchTo().window(winHandle);
 }

// Do some operation on child window and get child window handle.
String winHandleAfter = driver.getWindowHandle();

//switch to child window of 1st child window.
for(String winChildHandle : _driver.getWindowHandles()) {
  // Switch to child window of the 1st child window.
  if(!winChildHandle.equals(winHandleBefore) 
  && !winChildHandle.equals(winHandleAfter)) {
    driver.switchTo().window(winChildHandle);
   }
 }

// Do some operation on child window of 1st child window.
// to close the child window of 1st child window.
driver.close();

// to close the child window.
driver.close();

// to switch to parent window.
driver.switchto.window(winHandleBefore);

【讨论】:

    【解决方案2】:

    像这样试试。

    1. 关闭第二个子窗口
    2. 然后有两个窗口主窗口和第一个子窗口
    3. 尝试getWindowhandles();它应该返回 2 个窗口句柄。
    4. 从这两个窗口句柄中提取主窗口句柄。
    5. 使用上面的窗口句柄切换回主窗口。

    driver.switchTo().defaultContent();

    http://santoshsarmajv.blogspot.in/2012/04/how-to-switch-control-to-pop-up-window.html

    【讨论】:

      【解决方案3】:

      试试这个 打电话之前

      driver.switchTo().window(parentwindow);
      

      你应该打电话

      driver.switchto.defaultcontent .
      

      【讨论】:

        【解决方案4】:
                    int i = WebDriver.WindowHandles.Count;
                    if (i > 1)
                    {
                        //switch to child window
                        WebDriver.SwitchTo().Window(WebDriver.WindowHandles[1]);
                        //switch to parent window
                        WebDriver.SwitchTo().Window(WebDriver.WindowHandles[0]);
                    }
        

        【讨论】:

          【解决方案5】:

          试试这个切换到差异窗口句柄并返回父窗口

            String winHandleBefore = driver.getWindowHandle();
            for(String winHandle : driver.getWindowHandles())
            {
            driver.switchTo().window(winHandle);
            }
              for (String handle1 : driver.getWindowHandles())
           { 
            driver.switchTo().window(handle1);
           }
          

          //你的代码在这里

           driver.switchTo().window(winHandleBefore); //switch to parent window
          

          【讨论】:

            【解决方案6】:
            String Parent_Window = driver.getWindowHandle();    
            
             for (String Child_Window : driver.getWindowHandles())  
             {  
             driver.switchTo().window(Child_Window);  
             //Perform operation on child window 
             driver.close();
             } 
            
             //Switching back to Parent Window  
             driver.switchTo().window(Parent_Window);  
            

            【讨论】:

              【解决方案7】:

              WebDriver 中的多个弹出窗口过于关闭并切换到父窗口

              String parent = driver.getWindowHandle();
                  
              Set<String> pops=driver.getWindowHandles();
              Iterator<String> it = pops.iterator();
                  
              while (it.hasNext()) {
              
                  String popupHandle=it.next().toString();
              
                  if(!popupHandle.contains(parent)){
                      driver.switchTo().window(popupHandle);
                      System.out.println("Popu Up Title: "+ driver.switchTo().window(popupHandle).getTitle());
                      driver.close();
                  }
              }
              

              【讨论】:

                【解决方案8】:
                    String parentWindow = driver.getWindowHandle();
                    Set<String> allWindows = driver.getWindowHandles();
                    for (String window : allWindows) {
                        if (!window.equals(parentWindow)) {
                            String childWindow = window;
                            driver.switchTo().window(childWindow);
                            driver.getCurrentlUrl(); // Child windows url link
                        }
                    }
                    driver.switchTo().window(parentWindow); // switching control to the parent window
                    driver.getCurrentlUrl();  // Parent windows url link
                    driver.close(); //closes the child window
                    driver.quit(); //quits the driver
                

                【讨论】:

                  【解决方案9】:

                  试试下面的代码……它对我有用……

                  public static void main(String[] args) 
                  {
                      System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
                      WebDriver driver = new ChromeDriver();
                      driver.manage().window().maximize();
                      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                      driver.get("https://www.naukri.com/");
                  
                      //Get the address of main window
                      String p = driver.getWindowHandle();
                  
                      //get address of all windows
                      Set<String> allWH = driver.getWindowHandles();
                  
                      //get address of all windows and store it in ArrayList
                      ArrayList<String> allWHCopy = new ArrayList<String>(allWH);
                  
                      //close the 2nd window
                      for(int i=0;i<allWHCopy.size();i++)
                      {
                          if(i==2)
                          {
                              driver.switchTo().window(allWHCopy.get(i));
                              driver.close();
                          }
                      }
                  
                      //To switch to main window
                      driver.switchTo().window(p);
                  
                      //perform action in main window
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-11-28
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-04-15
                    • 2017-11-30
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多