java - Generic fields initialization in Selenium -
i describing grid or table view using selenium. want develop abstract class table classes inherit. here idea:
abstracttable class:
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 class:
@findby(xpath = ".//thead/tr") public abstract class abstractrow extends htmlelement { @override public rectange getrect() { return null; } } mytable class:
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 { // fields } @findby(xpath = ".//tbody/tr[not(@class = 'clicked')]") public static class tablerow extends abstractrow { // fields } } imagine there more 1 class similar mytable.
so, main question is: inner classes of class mytable decorated , initialized? or, if not, maybe there way more efficient?
i tried similar in past. however, more simple.
here code snippet:
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 used default implementation fielddecorator.
project structure like:
also, can have yandex-qatools htmlelements. created custom decorator , wrapper classes elements.
btw: have implementation table

Comments
Post a Comment