2017-05-05 5 views
0

webdriverを使用して、クラス名がtopredoのWeb要素をArrayListに取得していました。arraylistのサイズがrealより小さい

画面のスクロール時にウェブ要素が増加しているのを見て、私はwhileループを使ってスクロールしてグラブします。

このようなJavaコード:

outer: while (isContinue) {  
     List<WebElement> all = driver.findElements(By.className("torpedo")); 
     /* do screen scrolling*/ 
} 

それは最後のループまでうまく動作します。最後secodeループで

、私はall.size()結果208を得るが、ブラウザ上のWeb要素の実際の合計サイズが243である間、最後のループでは、all.size()結果は172であり、私は、リストのスタックを見るために日食のデバッグを使用しますコンテンツ。このような

スクリーン:

  • all.size()

all.size()

  • インデックス171

content end on index 171

のコンテンツ終了

なぜall.size()the real sizeより小さく、インデックスの内容が171より大きいのはなぜですか?

ありがとうございます!

+0

詳細情報:1.正確なテスト手順は何ですか? 2.何があなたのために働いたのですか?コードを表示する。 3.どこにいらっしゃいますか?エラースタックトレースを提供します。 4.関連するHTML DOMを提供する。 – DebanjanB

+0

あなたは 'all'を何度も何度もリセットしています...スクロールが終わったことが分かるまでスクロールしてから' all = driver.findElements(By.className( "torpedo") ); 'あなたのループの後?これにより、要素を設定する前にスクロールの問題が解決されることがあります。あなたの 'isContinue'がやっていることやループロジックの他の部分が見えないので、確かに言うのは難しいです。 :) – mrfreester

答えて

0

コメントに記載されているとおり、ループの繰り返しごとにリストをリセットし続けます。ループ外でListを開始し、ループ内のリストに要素を追加することができます。コードは次のようになります。

List<WebElement> all = null; 
outer: while (isContinue) 
{  
    all.addAll(driver.findElements(By.className("torpedo"))); 
    /* do screen scrolling*/ 
} 

リストに重複する要素がある場合は、リストの代わりにセットを使用することもできます。

Set<WebElement> all = null; 
outer: while (isContinue) 
{  
    all.addAll(driver.findElements(By.className("torpedo"))); 
    /* do screen scrolling*/ 
} 
関連する問題