2017-03-24 1 views
0

私はのウェイターをpresenceOfAllElementsLocatedBy条件で実装しました。私は時々私の方法は、すぐに(ページがロードされた)新しいページへのリダイレクト後にただ一つの要素を持つリストを返す問題でつまずくよ私のリスト<WebElement>にループ内のアイテムが複数あることを確認するにはどうすればよいか分かりません(時間のカウントは好ましくありません)

protected List<WebElement> waitForElements(By locator, WaitConditionForWebElements condition){ 

     return elements = wait.until(condition.getType().apply(locator)); 

} 

が、数秒で電流がList<WebElement>がありますように見えますいくつかの要素(期待通り)。だから、私はdo文と奇妙なカウン​​タを追加することで自分のメソッドを変更しました(注:私は睡眠時間に合わせて固定したくありません)。私が持っているものを見てください:

それは動作しますが、私は明らかにそれが良い方法ではないと感じています。 私は思うように、デフォルトのウェイター(条件、待ち時間)の工事の種類になります。 アドバイスをお待ちしております。

答えて

0

私は自分の期待状態を書かれている:

public class CustomExpectedCondition { 

public static ExpectedCondition<List<WebElement>> moreThanOne(
     final By locator) { 
    return driver -> { 
     List<WebElement> elements = getDriver().findElements(locator); 
     return elements.size() > 1 ? elements : null; 
    }; 

} 
} 

その後、私は​​であることを包まれています

@Getter 
@RequiredArgsConstructor 
public enum WaitConditionForWebElements { 

    allPresenceExtended(CustomExpectedCondition::moreThanOne); 

    private final Function<By, ExpectedCondition<List<WebElement>>> type; 

} 

あなたがたとえば、あなたの待機方法でそれを使用することができた後:

protected List<WebElement> waitForElements(By locator, WaitConditionForWebElements condition){ 

    return wait.until(condition.getType().apply(locator)); 

} 

このチェーンの最後には、ex PageObjectで十分です:

private List<WebElement> buttons(){ 

    return waitForElements(buttonsLocator, allPresenceExtended); 

} 
関連する問題