Шаблон и компоненты Selenium PageObjects

Каков стандартный подход к применению шаблона 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 # из коробки.


person Grant Trevor    schedule 10.10.2012    source источник
comment
НАДЕЮСЬ, это поможет: я использую следующую иерархию 1. BasePage-> anyOtherPage (если страница содержит раздел, она будет реализовывать функцию для установки фокуса на этом разделе и вызывать, после чего вы можете продолжить работу с функциями этого раздела. или удерживать в страница члена этого раздела и использовать его функцию напрямую, но тогда вам придется реализовать те же функции в классе страницы) 2. baseSection->anyOtherSection реализует все функции определенного раздела (клики, sendKeys, проверки...)   -  person Avishay    schedule 01.05.2015


Ответы (1)


Нет готового способа сделать это. Ваш подход очень хорош, вы можете реализовать его, вызвав PageFactory.InitElements() с пользовательской реализацией для IElementLocator и IPageObjectMemberDecorator См. этот ответ: Как инициализировать SelectElements при использовании PageFactory / FindsBy в Selenium C#?

person Liraz Shay    schedule 15.11.2016