5

ページのコンポーネントに PageObjects パターンを適用するときの標準的なアプローチは何ですか?

例として、Amazon の製品ページの機能のテストを書いているとしましょう。

そのページには、多数の個別の機能、製品情報、これを見た顧客、他の顧客が提案したものなどが含まれています。

私が見た PageObjects の現在の例は、機能が制限された単一のページを処理する方法のみをカバーしています。私が探しているのは、製品ページを表し、各コンポーネントを表す ComponentObjects で構成される PageObject の行に沿ったものです。

例えば:

public class ProductPage
{
    [FindsBy(How = How.Id, Using = "productInformation")]
    public ProductInformationControl ProductionInformation{get;set}

    [FindsBy(How = How.Id, Using = "customersViewed")]
    public CustomersAlsoViewedControl CustomersAlsoViewed{get;set}

    [FindsBy(How = How.Id, Using = "customersSuggested")]
    public CustomersSuggestedControl CustomersSuggested{get;set}
}

public class ProductInformationControl
{
    //Ideally the FindsBy here would find the element based on the Controls context
    // So only resolving to an element that was within the context of this control.
    [FindsBy(How = How.ClassName, Using = "title")] 
    private IWebElement _title;

    public string Title
    {
        get
       { 
           return _title.Text; 
       }
    }
}

次に、テスト内で次のようにコントロールにアクセスします。

 var productPage = ScenarioContext.Current.Get<ProductPage>();
 Assert.That(productPage.ProductInformation.GetTitle(), Is.EqualTo("My Title"));

私は以前にこのアプローチを使用しましたが、子オブジェクトとそのコンポーネントの解決を可能にする Selenium の上に構築されたカスタム フレームワークを使用しました。私が探しているのは、Selenium 2 と C# をそのまま使用するアプローチです。

4

1 に答える 1

0

これを行うためのすぐに使える方法はありません。あなたのアプローチは非常に優れています。IElementLocator と IPageObjectMemberDecorator のカスタム実装で PageFactory.InitElements() を呼び出すことで実装できます。この回答を参照してください

于 2016-11-15T09:16:10.157 に答える