2014-05-22 47 views
0

我想在TestNG中實現TimerTask,但它失敗了。 看一看我的代碼TimerTask不能與testng一起工作

public class Task extends TimerTask { 

    static int i =0; 
    @Override 
    public void run() { 

     System.out.println(++i +" : Hi"); 
     if(i==40){ 
      System.out.println("inside run method"); 
      cancel(); 
      System.exit(0); 
     } 
    } 

    } 

上層階級是我的任務,我想要實現

public class TestCount{ 
    private static final long DELAY = 0; 
    private static final long PERIOD = 100; 

    @Test 
    public void test(){ 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new Task(), DELAY, PERIOD); 
    } 
    } 

輸出:// 1:當我運行嗨

上面的代碼只打印時間而不是40次。幫我....

+0

1.'TimerTask'已被'ScheduledExecutorService'取代; 2.你爲什麼要這麼做? TestNG的'@ Test'有一個'timeout'參數 – fge

+0

其實我想建立我自己的輪詢方法。在我的代碼中,我試圖通過TimerTask實現這個......任何替代方法? –

回答

0

我想出了這個問題的解決方案。對於那些不想使用fluentwait投票的人可以使用我發佈的這個類。我沒有使用THREAD或SLEEPER就達到了這個目標。此課程將視爲POLLING替代方案。

public class PollingClass { 
private final long MAX_WAIT_IN_SECOND = 60; 
private long MAX_TIME_COUNT_IN_MILLISECOND = System.currentTimeMillis()+MAX_WAIT_IN_SECOND*1000; 
private long MIN_TIME_COUNT_IN_SECOND = 10; 
private static int i = 0; 

WebDriver driver; 
WebElement element; 

public PollingClass(WebDriver driver){ 
    this.driver = driver; 
} 

public WebElement getPolling(String path){ 

    try{ 
     while(System.currentTimeMillis() < MAX_TIME_COUNT_IN_MILLISECOND) 
     { 
      try{ 
       element = new WebDriverWait(driver, MIN_TIME_COUNT_IN_SECOND).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(path))); 

       if(element.isDisplayed()){ 
        System.out.println("element"+ ++i+" is displayed "); 
        break; 
       } 

      }catch(NoSuchElementException e){ 
//     e.printStackTrace(); 
       continue; 
      } 
     } 
    }catch(NoSuchElementException|TimeoutException e){ 
//   e.printStackTrace(); 
    } 

    return element; 
    } 
}