gpt4 book ai didi

java - Selenium 中的通用字段初始化

转载 作者:行者123 更新时间:2023-12-02 13:29:09 27 4
gpt4 key购买 nike

我正在使用 Selenium 描述网格或表格 View 。我想做的是开发一个抽象类 Table,其他类将从中继承。想法如下:

抽象表类:

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 类的内部类会被装饰和初始化吗?或者,如果没有,那么也许有一种方法可以更有效地做到这一点?

最佳答案

我过去尝试过做类似的事情。然而,它要简单得多。

这里是代码片段:

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);
}
}
}

AbstractPageElementFieldDecorator 的默认实现一起使用。
项目结构如下:

enter image description here

另外,您可以查看yandex-qatools htmlelements 。他们为元素创建了自定义装饰器和包装器类。

顺便说一句:他们已经实现了 Table

关于java - Selenium 中的通用字段初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43258894/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com