2016-05-04 3 views
0

У меня проблема с Selenium на Java. У меня есть веб-страницы, как это:Selenium WebDriver - итерация по строкам таблицы

<html> 
<body> 
<div id='content'> 
<table class='matches'> 
<tr id='today_01'> 
<td class='team-a'>Real Madrid</td> 
<td class='score'>0-0</td> 
<td class='team-b'>Barcelona</td> 
</tr> 
<tr id='today_02'> 
<td class='team-a'>PSG</td> 
<td class='score'>1-1</td> 
<td class='team-b'>Manchester City</td> 
</tr> 
<tr id='today_03'> 
<td class='team-a'>Liverpool</td> 
<td class='score'>2-2</td> 
<td class='team-b'>Arsenal</td> 
</tr> 
</table> 

<div id='content'> 
<body> 
<html> 

Я сначала получить все строки в списке:

List<WebElement> allRows = driver.findElements(By.xpath("//table[@class='matches']/tbody/tr[contains(@id, 'today')]")); 

Далее я перебирать все элементы, отображающие WebElement (то есть строки) и на следующая строка отобразилась тд, содержащей команду, разделенный линией:

for (WebElement row : allRows) { 
    System.out.println("Outer HTML for row" + row.getAttribute("outerHTML")); 
    System.out.println("Outer HTML for Home Team cell" + row.findElement(By.xpath("//td[contains(@class,'team-a')]")).getAttribute("outerHTML")); 
System.out.println("------------------------------------------------------------"); 
} 

первой Println отображает все строки, по одному. Второй, однако, отображает ТОЛЬКО «Реал Мадрид» для каждой итерации. Я теряю рассудок, потому что я не понимаю, почему. Кто-то может помочь?

Выход:

<tr id='today_01'> 
<td class='team-a'>Real Madrid</td> 
<td class='score'>0-0</td> 
<td class='team-b'>Barcelona</td> 
</tr> 
<td class='team-a'>Real Madrid</td> 
------------------------------------------------------------ 
<tr id='today_02'> 
<td class='team-a'>PSG</td> 
<td class='score'>1-1</td> 
<td class='team-b'>Manchester City</td> 
</tr> 
<td class='team-a'>Real Madrid</td> 
------------------------------------------------------------ 
<tr id='today_03'> 
<td class='team-a'>Liverpool</td> 
<td class='score'>2-2</td> 
<td class='team-b'>Arsenal</td> 
</tr> 
<td class='team-a'>Real Madrid</td> 
------------------------------------------------------------ 

ответ

0

Вы должны использовать как этот

System.out.println("Outer HTML for Home Team cell" + row.findElement(By.xpath("td[contains(@class,'team-a')]")).getAttribute("outerHTML")); 

Тогда он будет указывать на элемент исправить то, что мы хотим.

Спасибо, Мурали

+0

Yeap, он работал. Спасибо, Мурали! – George

+0

Полезно знать .. спасибо :) –

+0

@George - Если этот ответ сработал, вы должны пометить вопрос как ответ, выбирая этот ответ в качестве ответа (чтобы отдать кредит, когда кредит должен быть предоставлен, тому, кто ответил на ваш вопрос вопрос!) – Tyler