2013-12-16 45 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

相關問題