package br.com.caelum.seleniumdsl.webdriver.table; import org.apache.commons.lang.NotImplementedException; import org.openqa.selenium.WebDriver; import br.com.caelum.seleniumdsl.search.RowMatcher; import br.com.caelum.seleniumdsl.search.RowVisitor; import br.com.caelum.seleniumdsl.search.TableCriteria; import br.com.caelum.seleniumdsl.table.Cell; import br.com.caelum.seleniumdsl.table.Column; import br.com.caelum.seleniumdsl.table.Row; import br.com.caelum.seleniumdsl.table.Table; import br.com.caelum.seleniumdsl.table.layout.TableLayout; import br.com.caelum.seleniumdsl.webdriver.ByIdOrNameOrXPath; import br.com.caelum.seleniumdsl.webdriver.table.layout.WebDriverTableLayoutChooser; public class WebDriverTable implements Table { private final WebDriver webDriver; private final String id; private final String type; private final TableLayout layout; private Integer rowCount; private Integer colCount; public WebDriverTable(final WebDriver webDriver, final String id) { this(webDriver, id, "id"); } public WebDriverTable(final WebDriver webDriver, final String value, final String type) { this.webDriver = webDriver; this.id = value; this.type = type; layout = new WebDriverTableLayoutChooser(webDriver, value, type).choose(); } public Cell cell(final int row, final int col) { return new WebDriverCell(webDriver, this, row, col); } public Cell cell(final int row, final String col) { return new WebDriverCell(webDriver, this, row, findColumn(col)); } public Column column(final int columnIndex) { return new WebDriverColumn(this, columnIndex); } public Column column(final String columnName) { return column(findColumn(columnName)); } public Row header() { return row(1); } public Row row(final Integer row) { return new WebDriverRow(this, webDriver, row); } public TableCriteria createCriteria() { throw new NotImplementedException(); } public boolean exists() { return webDriver.findElement(new ByIdOrNameOrXPath(getId())) != null; } public Integer findColumn(final String columnName) { final Row row = new WebDriverRow(this, webDriver, 1); final int colCount = getColCount(); for (int i = 0; i < colCount; i++) { String current; try { current = row.cell(i + 1).headerValue(); } catch (final Exception e) { current = row.cell(i + 1).value(); } if (columnName.equals(current)) { return i + 1; } } throw new IllegalArgumentException("Column " + columnName + " not found"); } public int getColCount() { if (colCount == null) { colCount = layout.getColCount(); } return colCount; } public int getContentCount() { return layout.getContentCount(); } public String getId() { return id; } public TableLayout getLayout() { return layout; } public int getRowCount() { if (rowCount == null) { rowCount = layout.getRowCount(); } return rowCount; } public String getType() { return type; } public void iterate(final RowVisitor visitor) { throw new NotImplementedException(); } public RowMatcher select(final RowMatcher matcher) { throw new NotImplementedException(); } }