2016-07-11 3 views
0

У меня есть List из WebElements на веб-странице с определенной шириной (я не знаю), и я хочу напечатать все элементы, показанные в этом списке. Вот мой код:Только первые элементы видны в списке

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 кинотеатра текст (которые являются видимыми) и для остальных кинотеатров он не печатает пустой (без текста), так как остальная часть список кинотеатров находится под прокруткой. Для просмотра этих названий кинотеатров (WebElement) нам нужно прокрутить.

Как распечатать список всех 32 кинотеатров?

+0

попробуйте метод selenium moveToElement, который находится в классе Action. –

+1

переместите возвращаемый новый CinemaModule (драйвер); 'after for loop – Madhan

+0

Как вы можете сказать, что ваш предоставленный метод печатает только первые 4 текста в кинотеатрах, пока он вернется сразу после первой итерации ??? вы уверены, что ваш метод правильный? –

ответ

1

Вы можете использовать метод executeScript() JavaScriptExecuter для прокрутки определенного элемента в представлении, а затем использовать метод 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

Не имея возможности увидеть сайт сам я не уверен, но это выглядит как один большой вопрос вы возвращаетесь из этой функции до того, как цикл будет завершен. У вас есть возврат внутри цикла 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

Я не думаю, что это фактическая проблема ОП, потому что он ясно говорит о том, что ** печатает только первые 4 текста кинотеатров **. в то время как предоставленные методы будут печатать только одну итерацию –