1

Page Objects パターンに関する継承に対処する方法を提案してください。

たとえば、ページ オブジェクトはプロパティとメソッドを共有する必要があります。

public class LoginPage extends SuperPage
public class SuperPage extends LoadableComponent<SuperPage>

これでOKです。しかし、問題は、UnitTests が SuperPage を拡張せず、テストのグローバル プロパティなどを保持する TestCase を拡張することです。

TestCase と SuperPage で同じものを共有する必要があるため、重複を避けるようにしています... Pages と Tests は、これらのうちの 1 つだけを拡張できます。

たとえば、利用可能な PageObjects と Tests で同じフォーム データが必要です...

例:

html フォームに入力するための PageObject がある場合、フォーム フィールドの名前が必要ですが、他の pageObject でも必要です。フィールド名がある SuperPage を拡張するようにします。たとえば、次の理由により、UnitTests から提供することはできません。

@CacheLookup
@FindBy(how = How.ID, using = namespace + signifLvl)
private WebElement sigLvl;
@CacheLookup
@FindBy(how = How.ID, using = namespace + languageTo)
private WebElement langTo;  
@CacheLookup
@FindBy(how = How.ID, using = namespace + languageFrom)
private WebElement langFrom;
@CacheLookup
@FindBy(how = How.ID, using = namespace + description)
private WebElement desc;

しかし一方で、これらを UnitTest メソッドで使用する必要があります。これは、それらとは異なる値を PageObjects に提供するためです。

それ以外の場合は、常に次のようにして、PageObjects に TestCase からの変数を事前設定します。

@Test
public void doStuff() throws IOException {
    driver.navigate().refresh();
    FillOutFormPage fofp = new FillOutFormPage(driver);
    fofp.fill(some values from TestCase);
    fofp.get();
}
4

2 に答える 2

0

私は WebDriver をあまり使っていませんが、私が作成してテストしたほとんどの PageObjects は、入力する必要がなかったことを覚えています。それらには、UnitTest から呼び出されるテスト メソッドの形式で、シナリオ (テストされる条件のシーケンス) が含まれていました。PageObjects 間で共有される唯一のプロパティは、いくつかのフィールドまたはフィールド名でした (非常に例外的に - クリックすると検証がトリガーされる送信ボタンのように、ページ全体を形成し、何かを検証するすべてのコンポーネントから到達可能である必要があります)。たとえば名前空間。

さまざまなデータを入力する必要がある PageObjects を作成する場合。外部から移動する必要があります (UnitTests)。したがって、unitTests のデータを使用して pageObjects を作成するか、むしろ構築する必要があると思いますが、それは、他の人が必要とし、その初期状態とは異なる必要がある「コンポーネントのようなサービス」である場合に限ります。いつもこのようにしていれば、TestCase と PageObjects の間でこの種のデータを共有する必要はないはずです。

PageObjects と UnitTests の間には「ボーダー」が必要です ...さまざまなデータが unitTests から pageObjects テスト メソッドに取り込まれ、html に関する静的データが PageObjects にとどまる必要があります ... IMHO

SuperPageObejct を使用することはお勧めしません。SomePageObject.get() メソッドは、SomePageObject の代わりに SuperObject を返します... object1 に必要なものは、オブジェクト 1 にとどまります。継承があってはなりません。Object1 には、object2 から必要なものは何もありません。

于 2011-06-02T10:18:20.170 に答える
0

ページ オブジェクト パターンの重要な側面の 1 つは、テスト ケースとページ構造の分離です。テストがフィールドに入力している場合は、おそらく間違っています。テストでページの変数を埋める代わりに、テストで重要なアクションを実行できるようにするメソッドをページで提供する必要があります。したがって、代わりに:

myPage.sigLvl = "10"; myPage.langTo = "en"; myPage.langFrom = "de";

あなたがやる:

myPage.addTranslation("en", "de", 10);

要点は、テストではページの構造 (フィールドの名前、ページ上での配置方法など) を気にするのではなく、アプリケーションの動作を気にする必要があるということです。

于 2011-06-06T12:33:18.460 に答える