Проблема с получением сгруппированного списка элементов

Добрый день!
У меня есть такая таблица такого вида:

<table>
<tr>
    <td>1</td>
    <td>2</td>
</tr>
<tr>
    <td>3</td>
    <td>4</td>
</tr>
</table>

Я понимаю как, например, получить все элементы tr или по-отдельности каждый td, но вот можно ли как-то делать выборку, чтобы получить массив в виде:
array(
    0 => array (1,2) ,
    1 => array (3,4)
)
Ну или какой-то похожей структуры? вобщем, чтобы как-то можно было объединять эти td по группам, где они являются дочерними одного и того же tr

2-х мерный массив создать нужно и в цикле заполнять элементы по какотому принципу.

Нужно написать универсальные геттеры ваших элементов сначала, тоесть доставать отдельно строки 

 

WebElement table = 
driver.findElement(By.id("table_id")); 

List<WebElement> rows = table.findElements(By.tagName("tr")); 
Iterator<WebElement> i = rows.iterator(); 
System.out.println("-----------------------------------------------"); 
while(i.hasNext()) { 
        WebElement row = i.next(); 
        List<WebElement> columns = row.findElements(By.tagName("td")); 
        Iterator<WebElement> j = columns.iterator(); 
        System.out.print(" | "); 
        while(j.hasNext()) { 
                WebElement column = j.next(); 
                System.out.print(column.getText()); 
                System.out.print(" | "); 
        } 
        System.out.println("")
         
System.out.println("-----------------------------------------------"); 

спасибо Вам большое за старания!
но у меня какая-то видимо не очень удачная версия WebDriver-PHP (https://github.com/chibimagic/WebDriver-PHP), потому что метод-аналог для next в phpunit работает некорректно... =(
Когда на странице много td, то метод возвращает не дочерний элемент, а первый, который есть на странице...
Буду искать еще варианты...
 

ну это Java

наверное, придется со временем переквалифицироваться мне)

накалякал тут для Вас оберточку для таблиц такого вашего типа универсальную

може пригодиться

не компилил и не пробовал запускать, так что можетет попробувать))

 

package Core;
 
 
import java.util.ArrayList;
import java.util.List;
 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
 
public class Table {
 
private WebDriver driver = PageLoader.GetInstance();
 
String id;
List<WebElement> raws;
List<WebElement> columns;
 
Table(String id){
this.id = id;
}
 
private WebElement getTable() {
WebElement table = driver.findElement(By.id(id));
return table;
}
 
private List<WebElement> tableToArray() {
List<WebElement> tableElements = getTable().findElements(By.xpath("//tr/td"));
return tableElements;
}
 
public int getRawsSize(){
List<WebElement> rows = getTable().findElements(By.xpath("//tr")); 
return rows.size();
}
 
public int getColumnsSize(){ 
return (tableToArray().size()/getRawsSize());
}
 
public String[][] getValueTable (){
String valueTable[][] = new String [getRawsSize()][getColumnsSize()];
 
for (int i=0;i<getRawsSize();i++){
for(int j=0;j<getColumnsSize();j++){
int k = i*getColumnsSize();
valueTable[i][j] = tableToArray().get(j+k).toString();
}
}
 
return valueTable;
 
public String[] getTableRaw (int i) {
String raw[] = new String [getColumnsSize()];
for(int j = 0; j < getColumnsSize(); j++)
{
raw[j] = getValueTable()[i][j];
}
 
return raw;
}
 
public String[] getTablecolumn (int j) {
String column[] = new String [getRawsSize()];
for(int i = 0; i < getRawsSize(); i++)
{
column[i] = getValueTable()[i][j];
}
 
return column;
}
 
 
}
 

покажите как вы реализовали ваш код?

есть два метода выбора в вашем фреймворке get_next_element и  get_all_next_elements

вам нужно использовать метод get_all_next_elements, который вернет вам все запиши, а не только первую

 

код методов такой, как видите во втором делается цикл и возвращает много элементов


  // See http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/element
  public function get_next_element($locator) {
    $payload = WebDriver::ParseLocator($locator);
    $response = $this->execute("POST", "/element", $payload);
    $next_element_id = WebDriver::GetJSONValue($response, "ELEMENT");
    return new WebDriver_WebElement($this->driver, $next_element_id, $locator);
  }
  
  // See http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/elements
  public function get_all_next_elements($locator) {
    $payload = WebDriver::ParseLocator($locator);
    $response = $this->execute("POST", "/elements", $payload);
    $all_element_ids = WebDriver::GetJSONValue($response, "ELEMENT");
    $all_elements = array();
    foreach ($all_element_ids as $element_id) {
      $all_elements[] = new WebDriver_WebElement($this->driver, $element_id, $locator);
    }
    return $all_elements;
  }

спасибо большущее! уверена, что пригодится)