0
私は、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の内部クラスを装飾して初期化するかどうかです。そうでない場合は、これをより効率的に行う方法があるかもしれません。
注実装を持つ抽象メソッドからプライベートフィールドを初期化することは本当に悪い考えです。それはコンストラクタからオーバーライド可能なメソッドを呼び出すこととまったく同じです(これは実際にあなたがやっていることなので)。代わりに、 'Class <? AbstractRow> '(または' AbstractRow'のインスタンス)をコンストラクタパラメータとして拡張します。 –
さて、これをメモとして取っておきます。たぶんあなたは私にこれを行うより効率的な方法をアドバイスできますか?問題は、Seleniumで汎用クラス定義を使用することはできないということです。 –
あなたが対処しようとしているシナリオ、これらのクラスの使用方法などについて詳細を追加してください。 – JeffC