2017-01-31 1 views
0

У меня есть таблица HTML с tr и td. Значения меняются в соответствии с заданным датой. Мне нужно перебирать каждую строку, последние данные столбца и добавлять их. Значение уменьшается на единицу для каждой строки. Пожалуйста, помогите мне, как получить только последние данные столбца каждой строки. Изображение прилагается ниже и подсвечивается.Как проитерировать только последние данные столбца каждой строки, когда таблица экспоненциально уменьшается

ClickHere

HTML code 
<div class="row"> 
<div id="installCohort" class="col-md-12"> 
<div class="cornelius-container"> 
<table class="cornelius-table"> 
<tr> 
<th class="cornelius-time">Time</th> 
<th class="cornelius-people">Installs</th> 
<th class="cornelius-people">1</th> 
<th class="cornelius-people">2</th> 
<th class="cornelius-people">3</th> 
<th class="cornelius-people">4</th> 
<th class="cornelius-people">5</th> 
</tr> 
<tr> 
<td class="cornelius-label">October 2016</td> 
<td class="cornelius-people">3</td> 
<td class="cornelius-absolute cornelius-extra-hot" title="3">3</td> 
<td class="cornelius-absolute cornelius-medium-high" title="1">1</td> 
<td class="cornelius-absolute cornelius-low">0</td> 
<td class="cornelius-absolute cornelius-low">0</td> 
**<td class="cornelius-absolute cornelius-low">0</td>** 
</tr> 
<tr> 
<td class="cornelius-label">November 2016</td> 
<td class="cornelius-people">16056</td> 
<td class="cornelius-absolute cornelius-hot" title="10790">10790</td> 
<td class="cornelius-absolute cornelius-high" title="7861">7861</td> 
<td class="cornelius-absolute cornelius-high" title="7186">7186</td> 
**<td class="cornelius-absolute cornelius-high" title="7186">7186</td>** 
<td class="cornelius-empty">-</td> 
</tr> 
<tr> 
<td class="cornelius-label">December 2016</td> 
<td class="cornelius-people">85254</td> 
<td class="cornelius-absolute cornelius-high" title="38098">38098</td> 
<td class="cornelius-absolute cornelius-medium-high" title="33857">33857</td> 
**<td class="cornelius-absolute cornelius-medium-high" title="33790">33790</td>** 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
</tr> 
<tr> 
<td class="cornelius-label">January 2017</td> 
<td class="cornelius-people">24814</td> 
<td class="cornelius-absolute cornelius-high" title="14883">14883</td> 
**<td class="cornelius-absolute cornelius-high" title="14839">14839</td>** 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
</tr> 
<tr> 
<td class="cornelius-label">February 2017</td> 
<td class="cornelius-people">227</td> 
**<td class="cornelius-absolute cornelius-extra-hot" title="226">226</td>** 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
</tr> 
<tr> 
<td class="cornelius-label">March 2017</td> 
**<td class="cornelius-people">0</td>** 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
<td class="cornelius-empty">-</td> 
</tr> 
</table> 
</div> 
</div> 
</div> 
</div> 
</div> 
</div> 
</div> 

Если вы видите на изображении выше, значения уменьшаются exponencially и даже метки элемента меняются, как Cornelius-низким, Корнилий-высокой, Корнилий-среды и так далее.

Я пробовал приведенные ниже шлейфы кодов в цикле. Поскольку теги элементов меняются, не могут принести только 0, 7186, 33790, 14839, 226

+0

Добавить фрагмент 'html' для того же не изображения – NarendraR

+0

Разве вы не опубликовали аналогичный вопрос здесь только недавно? В любом случае, пожалуйста, поделитесь своим кодом, чтобы кто-то мог вам помочь. В противном случае, это в основном пишут решение с нуля. –

+0

@barakmanos Вы говорите о [** this one **] (http://stackoverflow.com/questions/40347991/how-to-add-the-table-content-by-using-selenium-webdriver-java) ? – Mistalis

ответ

1

Попробуйте использовать ниже код, чтобы получить последний td каждого tr:

List<WebElement> rows = driver.findelements(By.xpath('//table[@class="cornelius-table"]//tr[not(th)]')); 
Iterator<WebElement> iter = rows.iterator(); 
while(iter.hasNext()) { 
    WebElement tr = iter.next(); 
    td = tr.findelement(By.xpath('./td[not(@class="cornelius-empty")][last()]')); 
    System.out.println(td.getText()); 
    } 
} 
+0

Я пробовал вышеуказанный код. Получение === FAILED: demoAppVerification org.openqa.selenium.NoSuchElementException: Не удалось найти элемент: {"method": "xpath", "selector": ".// td [last()]"} //// // .// td [last()] = Какое использование этого элемента. Получает ли он последний столбец строки. – Ram

+0

Я думаю, это потому, что элемент '' генерируется автоматически, попробуйте использовать '' // table [@ class = "cornelius-table"] // tr'' вместо '// таблицы [@ class =" cornelius-table «]/tr''.'td [last()]' должен соответствовать самому последнему элементу 'td' каждого' tr' – Andersson

+0

Я попробовал его, но все равно столкнулся с проблемой. Получение-NoSuchElementException для этого локатора .. .// td [last()] – Ram

0

@Andersson код должен работа для вас. Если нет, то, по его предложению, во время загрузки страницы может появиться tbody. Таким образом, вы можете просто заменить его код на картинке ниже (я добавил ссылку WebElement интерфейс, который отсутствовал на td):

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='cornelius-table']//tr")); 
Iterator<WebElement> iter = rows.iterator(); 
while(iter.hasNext()) { 
    WebElement tr = iter.next(); 
    WebElement td = tr.findElement(By.xpath("./td[not(@class='cornelius-empty') and last()]")); 
    System.out.println(td.getText()); 
    } 
} 

Если выше по-прежнему не работает, вы можете попробовать ниже один , который является только более оптимизированную версию с помощью XPath:

List<WebElement> tabledata = driver.findElements(By.xpath("//table[@class='cornelius-table']//tr/td[not(@class='cornelius-empty') and last()]")); 
for(WebElement td: tabledata) 
System.out.println(td.getText()); 

Приведенный выше код будет найти всю последнюю td элемент в каждой строки таблицы с class как cornelius-table и поместить его в список tabledata. Затем, используя цикл for-each, перебираем по списку tabledata, извлекаем и печатаем innerText.

EDIT Я изменил приведенные выше фрагменты кода в соответствии с фрагментом HTML, предоставленным OP.

+0

Получение только последних данных столбца. ЕСЛИ вы видите изображение выше. 9665 печатается в консоли. Но он должен уменьшаться экспоненциально. – Ram

+0

@Ram, спасибо за добавление фрагмента HTML. Пожалуйста, найдите обновленный фрагмент кода выше. Теперь xpath найдет 'tabledata', который будет последним, и не будет содержать класс' cornelius-empty', который, по-видимому, подходит к концу и не содержит данных. – Subh