2016-07-11 19 views
0

ListWebElementsです。これは特定の高さ - 幅(これはわかりません)のウェブページにあり、そのリストに表示されているすべての要素を印刷します。ここに私のコードは次のとおりです。最初の要素のみがリストに表示されます

public CinemaModule CinemasName() throws InterruptedException 
{ 
    List<WebElement> cinemalist = driver.findElements(By.cssSelector("h4.media-heading")); 
    System.out.println("Total cinemas are " + cinemalist.size()); 
    System.out.println("Cinemas names are:- "); 
    for (int i = 0; i < cinemalist.size(); i++) 
    { 
     System.out.println(cinemalist.get(i).getText()); 
     return new CinemaModule(driver); 
    } 
} 

このコードは私にcount = 32を与えますが、私はテキストを取得するとき、それは最初の4つの映画館のテキストを印刷します(閲覧可能であること)、映画館の残りのために、それは(テキストなし)はnullを印刷し、残りはのために映画館のリストはスクロールしています。これらの映画館名(WebElement)を見るためには、スクロールする必要があります。

32の映画館のリストをすべて印刷するにはどうすればよいですか?

+0

ActionクラスのセレンmoveToElementメソッドを試してください。 –

+1

forループの後にreturn new CinemaModule(ドライバ); 'の後に – Madhan

+0

最初の繰り返しの直後に返される間に、提供されたメソッドが最初の4つの映画のテキストのみを出力するとはどういう意味ですか?あなたの方法は正しいと確信していますか? –

答えて

1

JavaScriptExecuterのexecuteScript()メソッドを使用して特定の要素をビューにスクロールし、getText()メソッドを使用して要素からテキストを取得できます。

以下のコードを試してみてください、

public CinemaModule CinemasName() throws InterruptedException 
{ 
    List<WebElement> cinemas = driver.findElements(By.cssSelector("h4.media-heading")); 
    System.out.println("Total cinemas are " + cinemas.size()); 
    System.out.println("Cinemas names are:- "); 
    JavascriptExecutor jse = (JavascriptExecutor) driver; 
    for (WebElement cinema : cinemas) 
    { 
     jse.executeScript("arguments[0].scrollIntoView(true);", cinema); 
     System.out.println(" " + cinema.getText()); 
    } 

    return new CinemaModule(driver); 
} 
+0

コードを適切に書式設定してインデントしてください。あなたのエディタにこれを行い、すべての行に少なくとも4つのスペースがあることを確認して、それを答えに貼り付けることができます。 – JeffC

+0

要素がすでにリスト内にあり、繰り返し実行されているため、実際には何も行いません。この場合、要素がスクロールすると変更される場合は、古い例外がスローされます... –

+0

私はちょっと解答を少しきれいにしましたインデントをより読みやすくするためにインデントを修正します。この回答はうまくいきます... OPが自分のURLを投稿すると、私は試しました。 – JeffC

-1

サイト自体を見ることができず、私はよく分からないが、1つの大きな問題は、ループが完了する前にこの関数から戻ってきているであるように見えます。 forループの中に戻ります。 forループの後に移動し、問題が解決するかどうか確認してください。

public CinemaModule CinemasName() throws InterruptedException 
{ 
    List<WebElement> cinemalist = driver.findElements(By.cssSelector("h4.media-heading")); 
    System.out.println("Total cinemas are " + cinemalist.size()); 
    System.out.println("Cinemas names are:- "); 
    for (int i = 0; i < cinemalist.size(); i++) 
    { 
     System.out.println(cinemalist.get(i).getText()); 
    } 
    return new CinemaModule(driver); 
} 

私はCinemaModuleが何であるか知らないが、私はそれが戻って何かわからないので、あなたは、この機能には何も設定されていませんでした。あなたがしているのは、映画館のリストを印刷している場合は、戻り値の型をvoidに変更できるように何も返す必要はありません。しかし、私はあなたのコードを見ることができません。

+0

私は実際に投稿の質問の間にループの外に戻るリターンを移動することを忘れたと思う...あなたは答えを提供する代わりにコメントで指摘することができます... –

+0

@SaurabhGaur私はそれを行うと問題を解決する答えなし。それが私が答えとして投稿した理由です。 – JeffC

+0

これは実際のOPの問題ではないと思います。なぜなら最初の4枚の映画のテキストのみをプリントしているからです。提供されたメソッドは1回の反復しか印刷しません –

関連する問題