WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("id")));引数に渡しているインスタンスが条件を表している。よくある条件はExpectedConditionsクラスに用意されている。not(ExpectedCondition)もあるのでたいていの場合はこれで事足りる。
単に待つだけじゃなく、条件を満たした時のインスタンスを返してくれるのが便利。
独自の条件が必要な場合は、ExpectedCondition<T>インタフェースを実装して、applyメソッドをオーバーライドする。その返値の型は、インタフェースの型パラメータで指定する。nullでもfalseでもない値が返されると、条件を満たしたと判定される。
車輪の再発明だけれど、上記の例を無名クラスを使って実装すると、次のようになる。
WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(new ExpectedCondition(){ @Override public WebElement apply(WebDriver d) { return d.findElement(By.id("id")); }});