Настройка BasePage для selenium pagefactory

Я настроил первые две страницы своего веб-сайта, и обе страницы имеют общую служебную панель навигации в верхней части страницы. как вы можете видеть на двух страницах, мне пришлось дублировать код, используемый для поиска и нажатия на эти элементы. Я читал, что вы можете перемещать общие элементы на базовую страницу, а затем использовать код этой базовой страницы на других страницах.

Мой вопрос в том, как переместить повторяющийся код в новый файл, но при этом иметь доступ ко всем элементам с других моих страниц.

Страница информационной панели:

 public class DashboardPage
    {
        private IWebDriver driver;

        #region WebElement

        [FindsBy(How = How.Id, Using = "AgentPAS")]
        private IWebElement Policy;

        [FindsBy(How = How.Id, Using = "Billing")]
        private IWebElement Billing;

        [FindsBy(How = How.LinkText, Using = "Activity")]
        private IWebElement Activity;

        [FindsBy(How = How.LinkText, Using = "Premium")]
        private IWebElement Premium;

        [FindsBy(How = How.LinkText, Using = "Production Summary")]
        private IWebElement ProductionSummary;

        [FindsBy(How = How.LinkText, Using = "Quote to Bind")]
        private IWebElement QuoteToBind;

        #endregion

        public DashboardPage()
        {
            PageFactory.InitElements(ObjectRepository.Driver, this);
        }

        #region Actions

        public void PolicyButton()
        {
            Policy.Click();
        }

        public void BillingButton()
        {
            Billing.Click();
        }

        public void ActivityLink()
        {
            Activity.Click();
        }

        public void PremiumLink()
        {
            Premium.Click();
        }

        public void ProductionSummaryLink()
        {
            ProductionSummary.Click();
        }

        public void QuoteToBindLink()
        {
            QuoteToBind.Click();
        }

        #endregion

    }

ClientDetailsOnePage:

public class ClientDetailsOnePage
    {
        private IWebElement driver;

        #region WebElement

        [FindsBy(How = How.Id, Using = "AgentPAS")]
        private IWebElement Policy;

        [FindsBy(How = How.Id, Using = "Billing")]
        private IWebElement Billing;

        [FindsBy(How = How.XPath, Using = "//input[@fieldref='AccountInput.Title']")]
        private IWebElement Title;

        [FindsBy(How = How.XPath, Using = "//input[@fieldref='AccountInput.FirstName']")]
        private IWebElement FirstName;

        [FindsBy(How = How.XPath, Using = "//input[@fieldref='AccountInput.Name']")]
        private IWebElement LastName;

        [FindsBy(How = How.XPath, Using = "//input[@fieldref='AccountInput.DesignatedAuthority']")]
        private IWebElement DesignatedAuthority;

        [FindsBy(How = How.XPath, Using = "//span[@data-ref='displayEl']")]
        private IWebElement UKResident;

        [FindsBy(How = How.LinkText, Using = "Save & Exit")]
        private IWebElement SaveExit;

        [FindsBy(How = How.LinkText, Using = "Next")]
        private IWebElement Next;

        #endregion

        public ClientDetailsOnePage()
        {
            PageFactory.InitElements(ObjectRepository.Driver, this);
        }

        #region Actions

        public void PolicyButton()
        {
            Policy.Click();
        }

        public void BillingButton()
        {
            Billing.Click();
        }

        public void TitleDropDown(string text)
        {
            Title.SendKeys(text);
        }

        public void FirstNameTextBox(string text)
        {
            FirstName.SendKeys(text);
        }

        public void LastNameTextBox(string text)
        {
            LastName.SendKeys(text);
        }

        public void DesignatedAuthorityDropDown(string text)
        {
            DesignatedAuthority.SendKeys(text);
        }

        public void UKResidentCheckBox()
        {
            UKResident.Click();
        }

        public void SaveExitButton()
        {
            SaveExit.Click();
        }

        public void NextButton()
        {
            Next.Click();
        }

        #endregion
    }

person Ross    schedule 13.12.2017    source источник


Ответы (1)


На обеих страницах есть панель навигации, поэтому панель навигации является частью страницы. Вы можете создать отдельный класс для панели навигации и повторно использовать его на каждой странице, которая вам нравится.

Это называется композиция

Быстрый пример:

public class NavigationBar
{
    [FindsBy(How = How.LinkText, Using = "Next")]
    private IWebElement Next;

    [FindsBy(How = How.LinkText, Using = "Previous")]
    private IWebElement Previous;

    public NavigationBar(IWebDriver driver)
    {
        PageFactory.InitElements(driver, this)
    }
}

public class DashboardPage
{
    public NavigationBar NavigationBar { get; set; }

    public DashboardPage(IWebDriver driver)
    {
        NavigationBar = new NavigationBar(driver);
    }
}

public class ClientDetailsOnePage
{
    public NavigationBar NavigationBar { get; set; }

    public ClientDetailsOnePage(IWebDriver driver)
    {
        NavigationBar = new NavigationBar(driver);
    }
}
person Marcel    schedule 13.12.2017