我正在使用Selenium描述网格或表格视图。 我想要做的是开发一个抽象类表,其他类将继承该表。 这是一个想法:
AbstractTable类:
public abstract class AbstractTable extends HtmlElement {
public abstract Class<? extends AbstractRow> getHeader();
public abstract Class<? extends AbstractRow> getRow();
private Class<? extends AbstractRow> tableHeader = getHeader();
private Class<? extends AbstractRow> tableRow = getRow();
public AbstractTable() { // init method }
}
AbstractRow类:
@FindBy(xpath = ".//thead/tr")
public abstract class AbstractRow extends HtmlElement {
@Override
public Rectange getRect() { return null; }
}
MyTable类:
class MyTable extends AbstractTable {
@Override
public Class<? extends AbstractRow> getHeader() { return TableHead.class; }
@Override
public Class<? extends AbstractRow> getRow() { return TableRow.class; }
@FindBy(xpath = ".//thead/tr")
public static class TableHead extends AbstractRow { // some fields }
@FindBy(xpath = ".//tbody/tr[not(@class = 'clicked')]")
public static class TableRow extends AbstractRow { // some fields }
}
想象一下,有多个类与MyTable相似。
所以,我的主要问题是:我的MyTable类的内部类是否会被装饰和初始化?或者,如果没有,那么也许有办法更有效地做到这一点?
答案 0 :(得分:1)
我过去曾尝试过类似的事情。但是,它要简单得多。
以下是代码段:
public class Table extends AbstractPageElement {
public Table(WebElement wrappedElement, String name, String page) {
super(wrappedElement, name, page);
}
public static final String ROW_XPATH_LOCATOR = "//tbody/tr";
private static String getCellXpathLocator(int row, int column) {
return ROW_XPATH_LOCATOR + "[" + row + "]/td[" + column + "]";
}
public int getRowCount() {
return findAllByXPath(ROW_XPATH_LOCATOR).size();
}
public String getCellValue(int row, int column) {
Cell cell = new Cell(row, column, this.name, this.page);
return cell.getText();
}
public class Cell extends AbstractPageElement {
private int row;
private int column;
public Cell(WebElement wrappedElement, String name, String page) {
super(wrappedElement, name, page);
}
public Cell(int row, int column, String name, String page) {
super(Table.this.findByXPath(getCellXpathLocator(row, column)), name, page);
this.row = row;
this.column = column;
}
public String getText() {
return wrappedElement.getText();
}
public Cell nextInRow() {
return new Cell(row, column + 1, name, page);
}
public Cell previousInRow() {
return new Cell(row, column - 1, name, page);
}
public Cell nextInColumn() {
return new Cell(row + 1, column, name, page);
}
public Cell previousInColumn() {
return new Cell(row - 1, column, name, page);
}
}
}
AbstractPageElement
与FieldDecorator
的默认实施一起使用
项目结构如下:
另外,您可以查看yandex-qatools htmlelements。他们为元素创建了自定义装饰器和包装类。
BTW:他们实施了Table