2017-06-05 16 views
2

なぜ私のwaitメソッドは30秒待つのですか?なぜ私のwaitメソッドは30秒待つのですか?

メソッドが要素を見つけることができない場合、私のメソッドは30秒後にタイムアウトするはずですが、タイムアウトやアイデアなしでtrueまたはfalseを返しますか? apply(WebElement element)の条件がfalseを返されたら

public boolean WaitUntilWebElementIsVisiblePredicate(WebElement element) { 
FluentWait<WebElement> wait = new FluentWait<WebElement>(element) 
     .withTimeout(30, TimeUnit.SECONDS) 
     .pollingEvery(100, TimeUnit.MILLISECONDS) 
     .ignoring(NoSuchFieldException.class); 

Function<WebElement, Boolean> f = new Function<WebElement, Boolean>() { 
    @Override 
    public Boolean apply(WebElement element) { 
     if (!element.isDisplayed()) { 
      System.out.println("Method failed: WaitUntilWebElementIsVisiblepPredicate, using locator: " + element.toString()); 
      return false; 
     } 
     System.out.println("Element visible, using method: WaitUntilWebElementIsVisiblepPredicate, Locator: " + element.toString()); 
     return true;     
    } 
}; 
return wait.until(f); 
} 

答えて

0

は、時間のためのコードの待機がpollingEveryで定義されています。その後、実際の開始時刻(FluentWaitで開始時にキャプチャされる)が現在の時刻と比較されます。 waitの開始時刻と現在時刻の差がwithTimeout(30, TimeUnit.SECONDS)に設定された時刻よりも小さい場合は、timeout expiresまたはcondition becomes trueのいずれかになるまで、関数fが再度実行されます。

したがってIMOは、タイムアウト期間よりも前に返された場合、apply(WebElement element)trueを返したようです。

メソッドシグネチャhereを見てください。

+0

私はこのメソッドがfalseを返す場合でも、コメントをお寄せいただきありがとうございます。ポスティングを保持していて、30秒の最大時間が経過するまで待ちます。 – Gbru

+0

戻り値を返す以外は何も間違っていませんwait.until(f); 'はboolean型の関数ですが、' until'メソッドの戻り値の型はWebElementです。 – YuVi

+0

私は唯一の問題は、WebElement(IDロケータ)をパラメータとして渡す必要があることです – Gbru

関連する問題