Каков стандартный подход к применению шаблона PageObjects к компонентам страницы?
В качестве примера предположим, что я пишу тесты для функций на странице продукта Amazon.
Эта страница содержит большое количество отдельных функций, информации о продукте, клиентов, которые просматривали это, других клиентов, предложенных и т. д. и т. д.
Текущие примеры, которые я видел для PageObjects, на самом деле охватывают только то, как работать с одной страницей с ограниченной функциональностью. То, что я ищу, это что-то вроде PageObject, которое будет представлять страницу продукта, а затем состоять из ComponentObjects, которые представляют каждый компонент.
eg:
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 # из коробки.