【问题标题】:In Selenium how to handle a new window?在 Selenium 中如何处理一个新窗口?
【发布时间】:2018-01-10 14:03:48
【问题描述】:

我正在编写一个 selenium 脚本来登录并创建新邮件,发送并注销。但是当我点击新邮件按钮时,它会打开一个新窗口。在硒中,我该如何处理。我是硒的新手。请详细说明。

【问题讨论】:

标签: selenium-webdriver


【解决方案1】:

使用下面的代码,你必须使用 getWindowHandles- 我希望它有帮助,如果你在其他地方卡住了,请告诉我 -

 @Test
        public void multipleWindows() {
            driver.get(URL+"/windows");
            driver.findElement(By.cssSelector(".example a")).click();
            Object[] allWindows = driver.getWindowHandles().toArray();
            driver.switchTo().window(allWindows[0].toString());
            Assert.assertNotEquals(driver.getTitle(), "New Window");
            driver.switchTo().window(allWindows[1].toString());
            Assert.assertEquals(driver.getTitle(), "New Window");
        }
    }

【讨论】:

    【解决方案2】:

    如何获取窗口句柄:
    String handle = driver.getWindowHandle();
    如果当您单击任何链接、按钮等时打开多个窗口...然后获取每个窗口的“窗口句柄”-
    Set windowHandles = driver.getWindowHandles();

    "getWindowHandles()" :方法返回窗口句柄(每个打开的窗口的唯一 id),以便设置返回类型。因为 set 不会包含重复的元素,所以这里 getWindowHandles 为每个 winodw 返回唯一的 id/窗口句柄并存储在 Set 中。

    如何切换到正确/适当的窗口:
    基本上有两种方法可以切换到合适的窗口。

    1. 通过使用 windowName driver.switchTo().window( "windowName" );

    2. 获取当前/父/默认窗口句柄:

      String handle = driver.getWindowHandle();
      driver.switchTo().window( handle  );
      OR
      Set < String > windowHandles = driver.getWindowHandles();
      
      for(String handle : windowHandles )
       {
           driver.swicthTo().window( handle ); 
      }
      

    Example of Handling Multiple Windows In Selenium

    【讨论】:

      【解决方案3】:

      试试这段代码,很容易理解。

      WebDriver driver = new FirefoxDriver();
      driver.get("http://demo.guru99.com/popup.php");
      
      driver.findElement(By.xpath("html/body/p/a")).click();
      
      // return the parent window name as a String
       String parentWindow=driver.getWindowHandle();
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      
      // Pass a window handle to the other window
      for(String childWindow: driver.getWindowHandles())
          {
            System.out.println("Switch to child window");
      
            //switch to child window
            driver.switchTo().window(childWindow);
      
            //find an element and print text of it 
          WebElement textLabel=driver.findElement(By.xpath("html/body/div[1]/h2"));
           System.out.println(" text:  "+textLabel.getText());
           driver.close();
                  }
           System.out.println("Get back to parent window");
      
            //switch to Parent window
            driver.switchTo().window(parentWindow);
      
           //find an element and print text of it 
           WebElement logotext=driver.findElement(By.xpath("html/body/div[1]/h2"));
             System.out.println("text: "+logotext.getText());
             driver.close();
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        相关资源
        最近更新 更多