ページのコンポーネントに 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# をそのまま使用するアプローチです。