2013-12-16 46 views
0

我想用selenium WebDriver在Java中实现一个方法'waitForNewWindow'。这个方法就是等待检查一个新窗口是否打开。如果在指定的时间内打开一个新窗口,我需要返回true,否则返回false。在selenium webdriver中实现'waitForNewWindow'

公共布尔waitForNewWindow(目标字符串){

try { 

     Thread.sleep(30000); 
     if(driver.switchTo().window(target)!=null) { 
      log.info("New window is opened"); 
      return true; 
     } 


    }catch(Exception e) { 
     log.debug(e); 
     return false; 
    } 
    return true; 
} 

但在这里,我不想用了Thread.Sleep(时间)。等待时间需要指定如下:

WebDriverWait wait = new WebDriverWait(driver,TIMEOUT);

此外,在上面的代码中,控制切换到新的窗口,这是不期望的。有人可以提供关于如何实施我的要求的答案吗?

回答

0

终于拿到waitForNewWindow方法的实现,使用WebDriverWait对象如下:

try { 
    ExpectedCondition<Boolean> e = new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver wd) { 
     if (wd.switchTo().window(newTarget) != null) { 
      log.info("New window is opened with the window id : " 
          + newTarget); 
      driver.switchTo().window(parentHandle); 
      return true; 
     } else { 
      return false; 
     } 

     } 
    }; 
    WebDriverWait wait = new WebDriverWait(driver, TIMEOUT); 

     if (wait.until(e)) { 
     log.info("the wait for the expected condition is successful"); 
        return true; 
     } 

    } catch (Exception e1) { 
    log.debug(e1); 
    return false; 
    } 

测试相同,其工作正常。

+0

只是一个想法,而不是控制驱动程序到一个新的选项卡,然后检查null它可以做的driver.getWindowHandle()。length()> 1.如果你能这样会给你一些很好的吞吐量。 –

+0

我尝试使用driver.getWindowHandle()。length(),但不知道它为什么返回值为'38'。对于语句'log.info(“当前窗口数量的值是:”+ wd.getWindowHandle()。length());',我得到的结果是'当前窗口数量的值是:38'。 – Sree

+0

对不起,它将是:driver.getWindowHandles()。size()。它应该返回两个,如果你有两个窗口。你可以试试看吗? –

0

你不能像你想要的那样指定超时。你必须使用Thread.sleep()。

关于你的控制移动到新的窗口,因为你的下面一行的控制正在向新的标签

driver.switchTo().window(target) 

如果你想简单地检查是否有两个窗口打开或没有,你可以写类似的下面

while(driver.getWindowHandle().length() != 2){ 
    Thread.sleep(2000); 
} 
1

下面提到的用于窗口的数目的代码检查出现与超时

public void waitForNumberOfWindows(final int length){ 
    new WebDriverWait(driver, 30) { 
    }.until(new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver driver) { 
      return driver.getWindowHandle().length()==length; 
     } 
    }); 
} 

它会检查Windows的预期数量出席该实例,如果计数在指定的超时(在上面的代码30)将返回true

相关问题