1

나는 내 웹 사이트의 처음 두 페이지를 설정했으며 두 페이지 모두 페이지 상단에 유틸리티 탐색 모음을 공유합니다. 두 페이지에서 볼 수 있듯이 이러한 요소를 찾아 클릭하는 데 사용 된 코드를 복제해야했습니다. 공통 요소를 기본 페이지로 이동 한 다음 다른 페이지에서 해당 기본 페이지의 코드를 공유 할 수 있다는 것을 읽었습니다.셀레늄 pagefactory에 대한 기본 설정

제 질문은 중복 코드를 새 파일로 이동하지만 다른 페이지의 모든 요소에 계속 액세스 할 수 있도록하는 것입니다.

DashboardPage :

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 
    } 

답변

2

두 페이지를 탐색 모음을, 그래서 탐색 모음 페이지의 일부입니다. 탐색 모음에 대해 별도의 클래스를 만들고 원하는 모든 페이지에서이 클래스를 다시 사용할 수 있습니다.

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); 
    } 
} 
:

는 구성

빠른 예라고