4

JDK1.8 と Lambda 式に関する記事を読んだ後、私がここ数年使用してきた ExpectedCondition ブロックは、おそらく Lambda 式として表現するのに適していることに気付きました。

この待機オブジェクトが与えられた場合:

Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
       .withTimeout(30, SECONDS)
       .pollingEvery(5, SECONDS)
       .ignoring( NoSuchElementException.class );

Selenium のこの ExpectedCondition 式を Lambda 式に変換する方法を誰か教えてもらえますか?

  WebElement foo = wait.until( new ExpectedCondition<Boolean>() {
       public WebElement apply( WebDriver webDriver ) {
           return webDriver.findElement( By.id("foo") );
       }
  } );
4

3 に答える 3

2

基本的に、ラムダは単なる匿名クラスではありませんが、動詞について議論したり、以前は匿名クラスを使用しなければならなかった場所でより簡潔なコードを提供したりする場合に非常に役立ちます。

アクションが発生するまで待機するように Selinium に指示します。古い構文では、ExpectedCondition インターフェースの新しい匿名実装を作成する必要がありましたが、ラムダでは、これはもはや当てはまりません。

したがって、Selinium がこの構文をサポートすると仮定すると、次のようになります。

wait.until(webDriver -> webDriver.findElement(By.id("foo")))

コードの長さを短縮し、読みやすくします。

より一般的に:

new Interface{
    public ReturnValue action(Type first,Type second...){
         return SomeExpression();
    }
}

なる:

(first,second) -> SomeExpression();
于 2013-08-31T21:53:00.843 に答える