如何在我的基本页面模型中创建辅助类的单个实例

问题描述 投票:0回答:1

我正在尝试在基本页面模型中创建日历选择器帮助器类的单个实例,以便从基本页面继承的所有其他页面模型都能够使用日历选择器帮助器的该实例。

这是我的助手类

class CalendarHelper : BasePage
{
    public CalendarHelper(IWebDriver driver) : base(driver)
    {
    }
}

这是我的基本页面模型

class BasePage
{
    public IWebDriver Driver;
    public CalendarHelper Calendar;
 
    public BasePage(IWebDriver driver)
    {
        Driver = driver;
        Calendar = new CalendarHelper(driver);
    }
}

我遇到的问题是实例化日历时的连续循环,因为传递了驱动程序,然后再次调用基页。有没有办法可以设置 Calendar 的单个实例,以便从 BasePage 继承的所有其他页面模型都可以使用它?还希望 Calendar 能够使用 BasePage 中的所有方法。

c# selenium-webdriver inheritance
1个回答
0
投票

助手不应该是 BasePage 的一部分。助手应该类似于页面逻辑、for 循环和添加与页面相关的其他逻辑的包装器。 如果您的应用程序在 SomePage 中有日历,它应该称为 CalendarComponent,并且它应该作为组件存在于您的 OrderPage 上。

例如

public class SomePage : BasePage{
    
       public readonly CalendarComponent CalendarComponent;
    
       public SomePage(IWebDriver driver) : base(driver)
       {
       }
        
       //Elements and methods for this page...
    }
    
    public class CalendarComponent : BaseComponent{
       public CalendarComponent(IWebDriver driver) : base(driver)
    {
    }
    //logic for calendar component...it could be reusable in other pages!
    
    public void TypeCalendarName(string calendarName) => Driver.FindElement(locator).SendKeys(calendarName);
    }
    
    public static class CalendarHelper{
       public static void TypeCalendarNames(CalendarComponent calendarComponent, params string[] calendarNames){
       calendarNames.ToList().ForEach(calendarName => calendarComponent.TypeCalendarName(calendarName) //+ other logic...
    }
    }

public class TestClass{

   [Test]
   public void SetCalendarNames(){
   string[] calendarNames = { "firstname", "secondname" };

   var somePage = new SomePage(Driver);

   CalendarHelper.TypeCalendarNames(somePage.CalendarComponent, calendarNames);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.